gpt4 book ai didi

C 奇怪的编译器行为

转载 作者:太空宇宙 更新时间:2023-11-04 06:30:42 28 4
gpt4 key购买 nike

我在使用 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 语言的新手。

最佳答案

getNextWord()中的局部变量char c;没有初始化,因此初步测试在

while(c != ' ')

是未定义的行为。你应该初始化例如作为

char c = 0;

关于C 奇怪的编译器行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20922606/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com