【发布时间】:2016-09-09 07:09:06
【问题描述】:
我正在 Windows (VS 2010) 上使用 fgetc 开发一个简单的程序,并且我认识到在使用此功能后(与 getc 的行为相同)尽管我以适当的权限打开它,但我无法写入文件.
这是我编写的一个简单程序,用于检查到底发生了什么:
int main(int argc, char * argv[])
{
FILE *f = NULL;
char ch = 0;
int bytes = 0;
f = fopen(argv[1], "r+");
ch = fgetc(f);
bytes = fwrite("1234", sizeof(char), 4, f);
printf("%d", bytes);
fflush(f);
fclose(f);
system("PAUSE");
return 0;
}
程序打印 4 并退出,没有任何错误,但文件内容保持不变。 经过一番研究后,我发现如果我添加这一行(即“什么都不做”):
fseek(f, 0, SEEK_CUR);
程序按预期运行,文件内容发生了变化。
添加此行后的所有代码:
int main(int argc, char * argv[])
{
FILE *f = NULL;
char ch = 0;
int bytes = 0;
f = fopen(argv[1], "r+");
ch = fgetc(f);
fseek(f, 0, SEEK_CUR)
bytes = fwrite("1234", sizeof(char), 4, f);
printf("%d", bytes);
fflush(f);
fclose(f);
system("PAUSE");
return 0;
}
有谁知道为什么会发生这种情况以及如何解决?
非常感谢, 哈南。
【问题讨论】:
-
首先
fgetc不会返回char。这其实很重要。 -
至于你的问题,文件的原始内容是什么?只有一个字节?
-
而
sizeof(char)为1,因为sizeof的返回值是chars 的数量(“字节”) -
顺便说一句,您真的打算以文本模式打开文件吗?