我正在尝试使用 fseek 转到文件中的特定位置并打印文本。但是当我使用 fputc 或 fwrite 时,它们会继续输入 Hex 值而不是 char 值。该文件是一个 .dat,最初用 0 填充。因此,除此之外,如果我尝试在某处写入文件的其余部分,则文件的其余部分将被删除......我需要它保持不变,但这个新文本会覆盖该特定位置。除此之外,为什么我的 fseek 一次移动 2 个字节而不是 1 个字节?代码:
FILE * pF;
pF = fopen( "/home/caleb/Documents/PA3/dssoo_p3_material_v2/disk.dat" , "wb" );
fseek (pF, 4, SEEK_SET);
char c='c';
fputc(c, pF);
//char buffer[] = { 'x' , 'y' , 'z' };
//fwrite (buffer , sizeof(char), sizeof(buffer), pF);
fclose (pF);
注意 fwrite 在这里被注释掉了。我还尝试了 fopen 中除 wb 之外的其他值。我得到:0000 0000 63
由于它是 .dat 文件,是否需要使用十六进制?这里的每个 0 都代表一个字节对吗?如果一个字符占用一个字节,它不应该能够占用一个位置(假设不需要十六进制)?
编辑:我已经意识到,如果我 cat 它会打印出角色。但这是否意味着每两个空格都被视为一个字节?