3

我正在编写一个 C 模块,但遇到了一个以前从未见过的有趣问题。

// Many other operations before this point
fseek(samples_file, 0, SEEK_SET);
printf("ftell A1 %llu\n", ftell(samples_file));
count = fwrite(channel_buffer+chan_type.size*set_index, 1, chan_type.size, samples_file);
printf("count %llu\n", count);
printf("ftell A2 %llu\n", ftell(samples_file));
// Many more operations to come after this point

当我运行模块时,我得到如下打印输出:

ftell A1 0
count 8
ftell A2 6018

我已将文件指针设置为文件的开头。当我写一些数据时,它应该在我寻找的位置写出数据,然后用写入的字节数(在本例中为 8)增加文件位置。但是,当我执行 ftell 时,位置似乎突然跳到了 6018(恰好是文件的原始大小加 8)。

为什么会发生这种情况以及如何防止这种行为?

4

1 回答 1

5

听起来文件已以附加模式打开。检查"a"第二个参数中是否没有fopen().

于 2012-11-27T07:59:34.980 回答