gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:19:43 26 4
gpt4 key购买 nike

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

错误:无效的初始化程序
我知道我需要使用 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 将返回 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;
}

这会给你一个更好的结果,因为它对来自用户。

关于无法将命令行参数读入整数数组 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49267955/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com