我是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。谢谢你的帮助。
答案 0 :(得分:4)
if((pf = fopen(nombre, "a+b")) == NULL)
这是经典之作。
答案 1 :(得分:0)
...
int main()
{
.
.
.
if(pf = fopen(nombre, "a+b") == NULL)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
正如@worldplasser的答案(+1)所指出的,你的第一个问题就在上面一行。
这应该是:
if((pf = fopen(nombre, "a+b")) == NULL)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
将FILE *分配给pf,然后检查它是否为NULL
你原来的方式,即
if(pf = fopen(nombre, "a+b") == NULL) /* wrong */
你将pf设置为`fopen(nombre,“a + b”)== NULL的结果,如果布尔语句(==)为FALSE则为0或者为0(通常为1)是真的。所以pf有boolean的结果而不是实际的文件指针。这也会引起问题,因为它现在正在考虑pf。
pf = fopen(nomber, "a+b") == NULL; /* here to clarify == happens before = */
if ( pf ) /* i.e. pf != 0 */