首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C中使用fput写入文件

在C中使用fput写入文件
EN

Stack Overflow用户
提问于 2017-09-11 17:14:44
回答 2查看 4.2K关注 0票数 18

有人能告诉我为什么文件不变吗?当我使用rewindfseek时,它可以工作,但在其他情况下就不行了。

fgets之后使用fputs的标准方法是什么?文件指示器位于位置9,因此fputs必须在此位置之后写入,但它不做任何事情。

在文件中:

代码语言:javascript
复制
abcd efgh ijkl mnor

在源代码中:

代码语言:javascript
复制
char c;
char str[15];

FILE *fp = fopen("d:\\data.txt","r+");

fgets(str, 10, fp);

// fseek(fp, 9, SEEK_SET);
// rewind(fp);

printf("%d\n", ftell(fp));
// ftel shows that it's in "9".

printf("%s", str);

fputs(str, fp);
// why its not working

fclose(fp);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-11 17:45:51

关于C标准中fopen/'+'的定义(例如,在this online C standard draft中),从读取切换到写入需要对文件定位函数的中间调用(重点是我的):

7.21.5.3 fopen函数

(7)当使用更新模式('+‘作为上述模式参数值列表中的第二个或第三个字符)打开文件时,输入和输出都可以在相关的流上执行。但是,如果没有对函数或文件定位函数(fseek、fsetpos或)的中间调用,输入输出之后不应直接跟随输入,除非输入操作遇到文件末尾,否则不应在输入之后直接跟随输出,而不插入对文件定位函数的调用。在一些实现中,用更新模式打开(或创建)文本文件可以改为打开(或创建)二进制流。

所以我建议你写下面的代码来解决你的问题:

代码语言:javascript
复制
fseek ( fp , 0, SEEK_CUR);
fputs(str, fp);
票数 26
EN

Stack Overflow用户

发布于 2017-09-11 17:39:10

fopenMS documentation是这样说的:

如果指定了"r+""w+""a+"访问类型,则同时启用读取和写入(文件被称为打开以进行“更新”)。但是,当您从读取切换到写入时,输入操作必须遇到EOF标记。如果没有EOF,则必须使用对文件定位函数的中间调用。文件定位函数是fsetposfseekrewind。当您从写入切换到读取时,必须使用对fflush或文件定位函数的中间调用。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46152077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档