Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新二进制文件而不覆盖它->;C_C_File_Binary - Fatal编程技术网

更新二进制文件而不覆盖它->;C

更新二进制文件而不覆盖它->;C,c,file,binary,C,File,Binary,我正在尝试更新一个二进制文件,该文件包含以下结构: typedef struct _test{ char question[100]; char answer[100]; }test; 在某种程度上,我想将保存在文件中的一个答案更新为另一个答案(再次将答案写回文件),但是,每次我更新文件时,它都会删除所有内容,只写入新的测试结构(在fopen中尝试了wb、wb+甚至wa+模式,并使用fseek设置光标,但没有运气) 如何编辑文件,使其不会擦除整个文件?使用fopen(“myfile.txt”,

我正在尝试更新一个二进制文件,该文件包含以下结构:

typedef struct _test{
char question[100];
char answer[100];
}test;
在某种程度上,我想将保存在文件中的一个答案更新为另一个答案(再次将答案写回文件),但是,每次我更新文件时,它都会删除所有内容,只写入新的测试结构(在fopen中尝试了wb、wb+甚至wa+模式,并使用fseek设置光标,但没有运气)


如何编辑文件,使其不会擦除整个文件?

使用
fopen(“myfile.txt”,“r+b”)
它将以二进制文件写入文件?是的,rb+或r+b将使用二进制模式。(我很惊讶地看到微软的文档说“b”不能作为第一个字符出现(请参阅);我将进行编辑以解决这个问题。)<代码>b作为第一个字符永远无效。
fopen
的唯一有效的
mode
参数由正则表达式
[arw](b?[+]?|[+]?b?
给出。其他任何内容都无效。@R..:它在哪里说的?我认为“b”和“t”只存在于DOS和Windows上,只是被其他平台礼貌地忽略了。@j_random_hacker:在标准7.19.5.3第3段中。“文本”模式是默认模式,允许中断,因此基本上应始终使用
b
标志。POSIX要求文本模式和二进制模式的行为无论如何都是相同的。一些DOS/Windows实现添加了
t
标志,这样它们就可以将二进制模式设为默认模式,并且仍然支持CRLF转换的“文本模式”。这种行为是非常不一致的。