【发布时间】:2011-12-04 15:33:52
【问题描述】:
我是 C 编程的新手。我正在尝试打开一个文件 (juanjo2.klb),它是我使用相同程序创建的二进制文件,我将在这里展示。问题是我正在尝试使用 fprintf() 函数将字符串打印到文件中,然后使用 fgets() 将字符串写入“cad”字符串,然后使用函数 printf() 打印到屏幕上我从文件中读取的字符串。
当我运行程序时,程序崩溃,Windows (Windows 7) 给我一个消息框,提示我的程序停止工作,它正在寻找问题的解决方案。所以我真的不知道我做错了什么,因为我认为我正确使用了这些功能。我需要你的帮助。以下是源代码:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define MAXCHARS 20
int main()
{
char cad[MAXCHARS];
FILE *pf;
char *nombre = "\\juanjo2.klb";
if(pf = fopen(nombre, "a+b") == NULL)
{
printf("Error opening file\n");
exit(-1);
}
fprintf(pf, "%s", "Hola como estas");
while(feof(pf) == 0)
{
fgets(cad, 13, pf);
printf("%s", cad);//Here I print the string to the screen.
}
fclose(pf); //Closing file.
system("PAUSE");
return 0;
}
我正在使用 Codeblocks IDE 10.05。感谢您的帮助。
【问题讨论】:
-
您不能使用 %s 打印二进制数据。一方面,它可能不是空终止的。
-
在使用
cad之前检查fgets的返回值。 -
您正在打开文件以二进制模式追加,然后您尝试从中读取。
-
不要以这种方式使用 feof()。它没有达到您的预期。
-
@PaulTomblin:
fgets将在它读取的数据后附加一个空终止符,这不是问题。