【发布时间】:2020-08-27 14:30:27
【问题描述】:
我正在编写一个 C 代码,它检查一个单词(由用户输入)在文本文件中出现的次数,打印每行的计数,以及屏幕上的总计数,并将该单词与文件的最后一个字。
我有一个专门的函数来获取最后一个名为“Fetch”的单词,该函数获取单词并将其返回给主函数。然后另一个函数计算出现次数,然后是第三个函数,它使用 strcmp() 实际比较两个字符串。
我的问题是函数 char* Fetch() 似乎出于某种原因返回了空字符串。请注意,我想检查问题实际出在哪里,所以我尝试在屏幕上的函数内打印结果,而不是将其返回到 main() 并且它起作用了!!,所以看起来,问题是返回语句,什么可能是问题?
char* Fetch() 在 main() 中调用:
//step 3: fetch the last word in the file
Lword = Fetch();
printf("the last word is %s", Lword);
char* Fetch():
char* Fetch()
{
char text[1000];
fread(text, sizeof(char), sizeof(text), spIn);
for(int i = 0; i < strlen(text); i++)
{
if(isspace(text[strlen(text) -1 -i])) //if space
{
return (text + (strlen(text)-i)); //return a pointer to the element after the space
}
}
}
main 中的声明:
char Uword[20], *Lword;
int TotalCount;
【问题讨论】:
-
1.您返回指向当函数返回时停止存在的数组的指针,2. 有时函数在没有
return语句的情况下到达末尾 -
拆分这个函数,它做的太多了。您需要的是一个从文件中读取数据的函数,以及一个识别最后一个单词的单独函数。
-
不要像这样一次又一次地打电话给
strlen(text)。只需将结果存储到变量中
标签: c string file pointers return