- 论坛徽章:
- 0
|
为了让在windows和linux下都能输出同样大小的回车符,用"wb"方式打开文件,然后以fprintf输出文本到文件,代码逻辑上大致如下:
-------------------
int main()
{
FILE* fp = fopen("file.txt", "wb"); // 以"wb"方式打开
parse(fp);
fclose(fp); // 处理完后有close
return 0;
}
// 文件在main中打开,传入文件指针
void parse(FILE* fp)
{
unsigned int k;
// some code ...
for (int k = 0; k != max_k; ++k) {
fprintf(fp, "%04u ",(unsigned int)k); // *****
fprintf(fp, "%010u ", (unsigned int)b);
fprintf(fp, "%010u ", (unsigned int)c);
fprintf(fp, "%010u\n", (unsigned int)d);
// fflush(fp);
}
}
-------------------
如果正确,file.txt的内容样式应该是:
0000 0000000000 0000000000 0000102823
0000 0001729622 0000102823 0000092643
0000 0003790261 0000195466 0000081655
0000 0005440549 0000277121 0000071467
但事实结果却是:
^@^@^@^@ 0000000000 0000000000 0000102823
0000 0001729622 0000102823 0000092643
0000 0003790261 0000195466 0000081655
0000 0005440549 0000277121 0000071467
以十六进制方式观察,发现第一行应该是k的值的位置的那些字符变成了0(不是字符"0")
如果加上上面的那个fflush,结果就是正确的了。。。
文件中似乎每隔一段长度就出现一次那四个0,这是不是和stdio的缓冲有关系呢
感觉很不明白,不知道有没有人知道可能是什么原因呢?
[ 本帖最后由 cnhbdu 于 2009-9-28 15:29 编辑 ] |
|