【发布时间】:2021-05-22 12:03:11
【问题描述】:
我正在尝试将 argv 命令行上的输入分配给我的 char 网络,但我一直收到一个错误提示
assignment to expression with array type
28 | networks[i] = atoi(argv[i]);
我想知道如何将 argv 分配给网络字符。请告诉我。
谢谢
14 int main(int argc, char** argv){
15 for (int j =0; j<1; ++j){
16 if(argc == 1)
17 {
18 printf("ERROR ERROR, you messed up");
19 }
20
21 else
22 {
23 // hold network addresses in a 2-d array, with 4 unsigned char
24 unsigned char networks[argc][4];
25
26 //store argv into networks using atoi
27 for (int i = 0; i<argc; ++i){
28 networks[i] = atoi(argv[i]);
29 printf("\t%hhu\n", networks[i]);
30
31 }
32 }
33 }
【问题讨论】:
-
argv是正式类型char *[](指针数组),network是unsigned char的二维数组,例如正式类型unsigned char (*)[4]。类型不匹配。networks[i] = atoi(argv[i]);尝试将int分配给unsigned char的数组。数组不是左值。 -
有什么方法可以改变 argv 以便我可以将它们等同起来?
-
unsigned char networks[argc];将创建argcunsigned char的数组(VLA)。然后分配networks[i] = atoi(argv[i]);将起作用。 (尽管由于atoi()返回类型int,你最好使用int networks[argc];)另外请注意atoi()提供零错误检测,并且很乐意为atoi ("my cow");静默返回0失败,最好使用sscanf()或strtol()用于转换。 -
对不起没有正确阅读代码..我删除了我的评论。我是新手;_;
-
别担心——我也犯了同样的罪(即使是今晚......)