无法将命令行参数读入整数数组 C

Cannot read Command Line Arguments into integer Array C

我正在尝试使用命令行参数并将其读入数组,但是编译器给我这个错误:

error: invalid initializer 我知道我需要使用 int main(int argc, char *argv[]) 来使用命令行参数,然后我将其设置为读取数组:

 int arr[] = atoi(argv[1]);

不确定我错过了什么,因为这在过去一直对我有用。有什么想法吗?

如果您正在通过命令行传递一系列数字并且您想要 将它们放在一个数组中,然后你可以这样做:

int main(int argc, char **argv)
{
    if(argc < 2)
    {
        fprintf(stderr, "not enough arguments\n");
        return 1;
    }

    int arr[argc-1];

    for(size_t i = 0; i < argc - 1; ++i)
        arr[i] = atoi(argv[i+1]);

    ...

    return;
}

转换从 argv[i+1] 而不是 argv[0] 开始的原因是 argv[0] 始终包含包含已执行文件名的字符串 二进制(更准确地说是你在 shell 中传递了命令),所以 argc 总是至少为 1。这就是为什么 arr 的维度是 argc-1, 因为对于 n 个参数,argc 将是 n+1.

还要注意 atoi 在遇到错误时表现不佳,如果 string 不是整数,那么 atoi 将 return 0 你不知道是否 这是转换错误的合法数字。使用 strtol 是 更好的选择:

int main(int argc, char **argv)
{
    if(argc < 2)
    {
        fprintf(stderr, "not enough arguments\n");
        return 1;
    }

    int arr[argc-1];
    char *endptr;

    for(size_t i = 0; i < argc - 1; ++i)
    {
        arr[i] = strtol(argv[i+1], &endptr, 0);

        if(*endptr != 0)
        {
            fprintf(stderr, "The argument #%d is not a number\n", i+1);
            return 1; // error
        }
    }

    ...

    return;
}

这会给您带来更好的结果,因为它会对来自 用户。