【发布时间】:2017-02-08 21:57:46
【问题描述】:
我使用strtok() 解析每个整数并将其放入int nums[1000]。该文件将始终遵循以下格式:
第一行是数组的数字,每个数字用空格分隔。不超过 10 个号码将在线上。第一行之后的文件中没有任何内容。
printf("Starting program\n");
char file_name[100];
strcpy(file_name, args[1]);
char number[100];
strcpy(number, args[2]);
FILE *fp;
fp = fopen(file_name, "r");
if (fp == NULL) {
printf("Error opening file\n");
}
char int_array[1000];//
int nums[1000]; //storing the integers without spaces
int i = 0; //for indexing the array to save the integers
while (fgets(int_array, 1000, fp) != NULL) {
printf("%s\n", "test");
puts(int_array); // prints out `1 2 3 4 5...`
char *token;
token = strtok(int_array, " ");
nums[i] = atoi(token);
while (token != NULL) {
token = strtok(NULL, " ");
nums[i] = atoi(token);
//puts(token); Token gets printed out correctly.
}
}
printf("%i\n", nums[i]); // this gives segmentation fault
printf(nums) // also gives seg fault
我不知道为什么会出现段错误。
【问题讨论】:
-
你真的没有增加
i还是你把它忽略了?如果i真的是0,那么我不相信printf("%i\n", nums[i])会出现段错误。这是不可能的。但是下一行肯定会成为一个问题,因为它完全无效 - 你不能随便打电话给printf。阅读手册页并检查它需要哪些参数。使用调试器准确找出哪一行出现了段错误并检查变量值。 -
当你这样做时,底部的
i的值是多少:printf("%i\n", nums[i]);?如果超过 999,则可能是 seg 故障的线索 -
aaah 是的,我修改了代码并意外遗漏了 ++i。我仍在努力找出段错误。感谢您指出这一点
标签: c arrays file fgets strtok