- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我从来没有意识到这一点。我本可以下意识地假设一个硬事实,即我可以在现有文件上的读写之间转换,打开它更新模式,就像那样。但是关于 SO 的两个问题(1 , 2 ) 让我怀疑,我决定尝试一下。这是我的发现:
在第一个程序 prog1
中,我处理一个文件 source.txt
,它只有 Lethal weapon 这行。我读了第一世界 Lethal 使用 fscanf()
并打算在之后立即编写 "musket" 期望得到 Lethal musket .But it simply failed, and I still get the original content Lethal weapon at the end of the write operation.But in that first program, if I insert the line fseek(fp,0, SEEK_CUR)
,写操作工作正常,我得到了 Lethal musket。我注意到 fseek(fp,0,SEEK_CUR)
除了调用 fseek()
只是为了它,因为根本没有网络搜索。
但是在第二个程序prog2
中,同样的场景不需要那个fseek(fp,0,SEEK_CUR)
语句。准确的说,在第二个程序,与第一个程序中读取到文件中间相比,这里我读取到文件末尾,然后开始在那里写入。即使不使用 fseek(fp,0,SEEK_CUR)
我得到了想要的内容 Lethal weapon sale。
问题:为什么我们不能在文件中间从read
转换到write
模式,有什么区别fseek (fp,0,SEEK_CUR)
让它工作?与此同时,如果我们读取到文件末尾并在那里写入,为什么相同的转换可以毫不费力地工作?为什么 fseek(fp, 0,SEEK_CUR)
在第二种情况下不需要吗?我使用 fseek(fp,0,SEEK_CUR)
使第一个程序中的写入成功有多明智?有更好的选择吗?
SO上的两个问题似乎在某种程度上解决了同一个问题,但是由于它们更多的是基于对文本/书籍摘录的解释,因此针对它们的答案似乎并没有解决我想知道的问题准确地说。
//PROG1
#include <stdio.h>
int main ()
{
FILE *fp=fopen("D:\\source.txt","r+");
char arr[20],brr[50];
fscanf(fp,"%s",arr);
printf("String is %s\n",arr);
//fseek(fp,0,SEEK_CUR); //Doesn't work without it
fprintf(fp," musket");
rewind(fp);
fgets(brr,50,fp);
printf("New string is %s",brr);
fclose(fp);
}
输出:
1) 没有fseek()
-- 致命武器
2) 使用 fseek()
-- Lethal musket
//PROG2
#include <stdio.h>
int main ()
{
FILE *fp=fopen("D:\\source.txt","r+");
char arr[20],brr[50];
fgets(arr,20,fp);
printf("Initial line is %s\n",arr);
fprintf(fp," sale"); //writes to end of file
rewind(fp);
printf("New string is %s",fgets(brr,50,fp));
fclose(fp);
}
没有 fseek() 的输出: -- 致命武器销售
最佳答案
实际上,它看起来像是您的 libc 实现中的错误。文件 I/O 流通常是对操作系统内核实现的基于文件描述符的二进制 I/O 的 libc 抽象。因此,任何奇怪的行为都应归因于您特定的 libc 怪癖。
由于您显然使用的是 Windows,这可能是问题的根源。您使用的编译器是什么?GCC 4.6.1 和 glibc-2.13 在 Ubuntu 11.10 上没有这个问题。
关于c - 除非我使用 fseek(fp,0,SEEK_CUR),否则为什么 rb+ 模式下的 R/W 过渡文件中间失败?为什么它在文件末尾工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16728240/
什么时候使用 fp:strict 而不是 fp:precise?如果我想要“更精确”的计算并避免舍入误差,使用前者是否更好?使用这两者背后的启发是什么? 最佳答案 标准 IEEE 754 指定了一种用
我检测到发布版本和调试版本之间的程序结果存在一些差异。经过一些研究,我意识到一些浮点优化导致了这些差异。我已经通过使用 fenv_access pragma 禁用一些关键方法的优化来解决了这个问题。
我在 Built-in Functions — Python 3.7.0 documentation 中阅读了内置函数 iter 的示例 with open('mydata.txt') as fp:
我在 Built-in Functions — Python 3.7.0 documentation 中阅读了内置函数 iter 的示例 with open('mydata.txt') as fp:
我一直在查找一些用 C 语言读取文件的例子,我看到了这两个例子 fgets(buff,255,(FILE*)fp); 和 fgets(buff,255,fp); 假设 fp 是前面定义的文件指针 "F
我是 FP-TS 的新手,但仍然不太明白如何使用 TaskEither .我正在尝试异步读取文件,然后使用 yaml-parse-promise 解析结果字符串。 ==编辑== 我用文件的完整内容更新
我需要在我的 Mac 上编译一个 C 文件,该文件是在仅假设 Linux 和 GCC 环境下编写的。该文件包含一行 if(fp->_IO_write_base == fp->_IO_write_end
for line in fp 和 for line in fp.readlines() 有什么区别? with open(filename, 'r') as fp : for line in
这可能非常无聊,但谷歌搜索确实没有帮助。 在python官方文档中,它经常将文件称为fp: with open(filename, "w") as fp: fp.write() “p”代表什么? 最佳
我想知道如果我设置/fp:fast 而不是 fp:precise 会遇到什么样的错误?我在 MSV10 下工作 我对最大位数为 8 的 double 执行/,*,+,- 运算,例如 1.4379294
我正在使用 Groovy 进行一个项目,我想采用一个员工数组,这样在数组中没有经理跟随他们的下属。原因是我需要将人员添加到数据库中,我不希望分两次完成。 所以,我基本上有: 12
背景: 许多年前,我继承了一个代码库,该代码库使用 Visual Studio (VC++) 标志“/fp:fast”在特定的计算量大的库中生成更快的代码。不幸的是,'/fp:fast' 产生的结果与
我正在尝试从PostgreSQL数据库检索数据,将其转换为视图模型数组,并将数据返回给客户端,在本例中最好是作为单个对象,而不是数组。对于我在错误消息下面列出的代码,我收到以下错误。我是函数式编程领域
所以我尝试将此类 Matlab 代码转换为 C++: ss = 'file.mask' fp = fopen(ss, 'rb'); sx = fread(fp, 1, 'int32') sy = f
我是fp-ts的新手,请帮助我解决问题: 我需要使用异步功能在不同级别上多次记录同一错误。这是我的示例代码: const myProgram = pipe( tryCatch(() => so
我正在尝试在为浏览器编写的库中使用 lodash/fp。我正在使用 Webpack 来打包我的库。 在我的代码中,我当前加载 lodash/fp 如下(ES2015 样式。我使用 Babel 对其进行
我的问题是引用 this post ,具体来说: data Actions a = Actions { actEval :: a, actMap :: (a -> a) -> Act
我正在阅读 FP,我有两个基本问题: FP 表示函数应该接受一个输入并给出单个输出。那么我该怎么办void方法?它不返回任何东西吗? FP 说函数应该是单一的 责任,那我们怎么处理log方法内的语句?
我是 c 初学者,所以我在让用户输入姓氏、逗号和名字时遇到问题。但是它将传递给函数调用 int get_name(FILE *fp) 在我的主要功能中。如果我必须使用参数参数,我就会遇到问题。 示例,
我有一些这样的序列 (100) - (102) - (103) - (104,106) - (108) (101) - (103) (102) - (106) 在 C++ 中有一些有效的实现前缀树或
我是一名优秀的程序员,十分优秀!