【发布时间】:2014-02-13 02:42:55
【问题描述】:
char* readScores(int* actualCount) {
char* stringArray = (char*)malloc(100*sizeof(char));
for(int i = 0; i <= 13; i++) {
*actualCount = *actualCount + 1;
scanf("%s", &stringArray[i]);
printf("stringArray = %s when i = %d\t actualCount = %d\n", &stringArray[i], i, *actualCount);
}
printf("Finished!");
return stringArray;
}
使用这段代码,我正在循环一个包含一些单词的 .txt 文件。当我运行这段代码时,我发现我确实在数组中的正确位置得到了正确的单词,但是一旦循环到达文件的末尾,程序就会给我一个段错误。我猜这是因为循环达到 EOF 值并引发错误,但我不知道如何修复它。这是结果的截图:http://i.imgur.com/kduzBnp.png
感谢您的帮助!
编辑
我将代码更改为:
while(scanf("%s", &stringArray) != EOF) {
*actualCount = *actualCount + 1;
printf("stringArray = %s when actualCount = %d\n", &stringArray, *actualCount);
}
但是,我仍然收到具有相同输出值的段错误。所以我知道它正在正确读取文件,我只是不明白为什么它会在最后停止并引发错误。
【问题讨论】:
-
代码可以使用
scanf()的返回值,但更好的方法是使用fgets() -
这个函数到底应该做什么?如所写,它从标准输入读取多个字,返回指向最后一个字的指针,并将
&actualCount设置为读取的字数(假设您传入一个指向初始值为0 的int的指针)。 -
这个特殊的功能应该可以做到这一点。程序作为一个整体读取文件,计算每个单词出现的次数,然后按出现次数对它们进行排序。我不知道为什么它给了我一个错误。
-
我认为它实际上会返回一个指向字符串的指针,该字符串由除最后一个字符串之外的所有字符串的第一个字符组成,然后是最后一个字符。
-
为什么要这样做?关于 scanf 的工作原理,我是否遗漏了一些东西?我怎样才能改变它?