C 为什么不是';是否允许我的程序切换模式?
我有以下C应用程序:C 为什么不是';是否允许我的程序切换模式?,c,windows,gcc,visual-studio-code,mingw,C,Windows,Gcc,Visual Studio Code,Mingw,我有以下C应用程序: #include <stdio.h> int main() { // Create a file. FILE *filePointer = fopen("deleteme.txt", "w+"); if (filePointer == NULL) { printf("Operation failed.\n"); return 0; }
#include <stdio.h>
int main() {
// Create a file.
FILE *filePointer = fopen("deleteme.txt", "w+");
if (filePointer == NULL) {
printf("Operation failed.\n");
return 0;
}
// Write "Test" to the file.
if (fputs("Test", filePointer) == EOF) {
printf("Operation failed.\n");
return 0;
}
// Seek to the beginning.
if (fseek(filePointer, 0, SEEK_SET) != 0) {
printf("Operation failed.\n");
return 0;
}
// Read the character "T".
if (fgetc(filePointer) == EOF) {
printf("Operation failed.\n");
return 0;
}
// Flush streams.
fflush(filePointer);
// Write "esting" to the file.
if (fputs("esting", filePointer) == EOF) { // <--- Fails here.
printf("Operation failed.\n");
return 0;
}
printf("Operation succeeded.\n");
return 0;
}
#包括
int main(){
//创建一个文件。
FILE*filePointer=fopen(“deleteme.txt”、“w+”);
if(filePointer==NULL){
printf(“操作失败。\n”);
返回0;
}
//将“测试”写入文件。
if(fputs(“Test”,filePointer)=EOF){
printf(“操作失败。\n”);
返回0;
}
//从头开始。
if(fseek(文件指针,0,搜索集)!=0){
printf(“操作失败。\n”);
返回0;
}
//读“T”字。
if(fgetc(文件指针)=EOF){
printf(“操作失败。\n”);
返回0;
}
//冲洗溪流。
fflush(filePointer);
//将“测试”写入文件。
if(fputs(“测试”,文件指针)=EOF){//fflush
应该只在读后再读时才需要,而不像这里读后再写。但是这里的实际问题可能与以下事实有关:fgetc
将文件指针移动超过1个字节,调用ftell
之后给我4。@ssbssa对我来说,ftell
返回一个v调用fgetc
后1
的值。这是意料之中的,因为char
在我的环境中是1字节。看起来您在fflush
之后调用了ftell
,这似乎将流位置提前到了末尾,在这种情况下它确实返回4
。是的,我在Windows上。你说得对,在fgetc
它返回1,但在fflush
之后它返回4,这很奇怪。@ssbssa是的,而且……由于我们处于写入和更新模式w+
,我希望fflush
将允许我们从读取切换到写入,如文档所述。在更新模式下,您的第一次读取或写入操作将使您n该模式,然后您需要切换模式才能允许相反的操作。fseek
确实按照文档中的说明工作,但我想知道为什么fflush
不工作。我想我现在找到了相关文档,请参阅:但是,当您从读取切换到写入时,输入操作必须遇到错误n EOF标记。如果没有EOF,则必须使用对文件定位函数的中间调用。