【发布时间】:2016-04-17 14:36:55
【问题描述】:
如何将程序参数中的三组数字读取到整数数组中,然后显示它们?那就是我输入./read 1,2,3 4,5,6 7,8,9,输出应该是
1 2 3
4 5 6
7 8 9
我的代码只适用于字符串,但不适用于整数
#include <string.h>
#include <stdio.h>
int main(int argc, char **argv)
{
int i;
int d[argc][3];
int x[3];
for(i = 1; i < argc; i ++){
char *a[3];
int j = 0;
a[j] = strtok(argv[i], ",");
while(a[j] != NULL){
a[++j] = strtok(NULL, ",");
x[j] = atoi(&(a[j]));
}
printf("%s %s %s \n", a[0], a[1], a[2]);
printf("%d %d %d \n", x[0], x[1], x[2]);
}
return 0;
}
每行显示1 0 0。
【问题讨论】:
-
注意:
,在3,4之间,但不在6 7之间。 -
int d[argc][3];的目的是什么? -
x[j] = atoi(a[j]);然后a[++j] = strtok(NULL, ","); -
a[3]也越界了。 -
当
strtok()失败时,这行:x[j] = atoi(&(a[j]));(写错了,应该是;x[j] = atoi(a[j]);将访问地址 0 的内存。这几乎肯定会导致access violation段错误事件。IE 在取消引用该值之前始终检查 (!=NULL) 从strtok()返回的值
标签: c arrays integer arguments argv