【发布时间】:2014-01-04 15:07:41
【问题描述】:
我在 C 的 MingW 编译器上出现了一些相当奇怪的行为。
我有一个名为 getNextWord 的函数,如下所示:
void getNextWord(FILE * pFile)
{
char * w = (char *)malloc(MAX_WORD_SIZE * sizeof(char *));
char * q = w;
char c;
while(c != ' ')
{
c = fgetc(pFile);
if(c != ' ')
{
*(w++) = c;
}
}
*(w++) = '\0';
printf("%s\n",q);
free(w);
}
由于某种原因,当我尝试连续两次调用此函数以打印两个单词时,它不起作用。然而奇怪的是,如果我在函数调用之间添加任何内容,包括 printf 或 fseek,那么该函数将按您的预期工作。
这行得通:
int main(int argc, char** argv) {
FILE * pFile = fopen("doc.txt", "r");
getNextWord(pFile);
printf("a");
getNextWord(pFile);
fclose(pFile);
return (EXIT_SUCCESS);
}
这不起作用:
int main(int argc, char** argv) {
FILE * pFile = fopen("doc.txt", "r");
getNextWord(pFile);
getNextWord(pFile);
fclose(pFile);
return (EXIT_SUCCESS);
}
有人知道为什么会这样吗?
编辑: 感谢您的帮助,这是固定功能:
void getNextWord(FILE * pFile)
{
char * w = (char *)malloc(MAX_WORD_SIZE * sizeof(char));
char * q = w;
char c;
do
{
c = fgetc(pFile);
if(c != ' ')
{
*(w++) = c;
}
} while(c != ' ');
*(w++) = '\0';
printf("%s\n",q);
free(q);
}
对于原帖中的所有错误,我很抱歉,我是 C 新手。
【问题讨论】:
-
可能跑题了,但
char * w = (char *)malloc(MAX_WORD_SIZE * sizeof(char *));有点不对——你需要sizeof( char )而不是sizeof( char* )。 -
我刚刚注意到,到目前为止,您从未“接受”过答案。请查看"How does accepting an answer work?"。您应该接受其中一个答案,而不是将解决方案放入您的问题中。您也可以发布自己的答案并接受它。 “接受”答案(通过单击复选标记)将问题标记为已解决(并为您和答案的作者提供一些声誉点)。 - 请检查您的问题并检查您是否可以接受答案。
-
欢迎来到 StackOverflow!您能不时考虑accepting 一个有用的答案吗?您的历史显示您有 16 个问题没有这样做,这表明您不知道该选项。
标签: c compiler-construction mingw