在下面的代码中,我希望您可以看到我有一个char*
变量,并且我想从一个文件中读取一个字符串。然后我想把这个字符串从函数传回来。我被指针弄糊涂了,所以我不太确定我应该做什么。
这样做的目的是将数组传递给另一个要搜索名称的函数。
不幸的是,程序因此崩溃,我不知道为什么。
char* ObtainName(FILE *fp)
{
char* temp;
int i = 0;
temp = fgetc(fp);
while(temp != '\n')
{
temp = fgetc(fp);
i++;
}
printf("%s", temp);
return temp;
}
任何帮助都将不胜感激。
最佳答案
fgetc
返回一个int
,而不是一个char*
。这个int
是流中的一个字符,如果到达文件末尾,则为EOF
。
您隐式地将int
强制转换为char*
,即将其解释为一个地址(打开您的警告)。当您调用printf
时,它读取该地址,并继续读取一个字符,一次查找以字符串结尾的空终止符,但该地址几乎肯定是无效的。这是未定义的行为。