为什么要额外的'ÿ'在 C 中写入 .txt 文件时添加?

发布于 2025-01-18 14:02:01 字数 281 浏览 1 评论 0原文

我到处都在搜索这个问题,但是建议的解决方案对我有用。

char currentChar;
FILE *fp_read = fopen("../input.txt", "r");
FILE *fp_write = fopen("../textArranged.txt", "w");
while (!feof(fp_read)){
      currentChar = fgetc(fp_read);
      ...
}

我试图更改WARE条件(使用GetC()),但它不起作用。

I searched about this problem everywhere, but none of the suggested solutions worked for me.

char currentChar;
FILE *fp_read = fopen("../input.txt", "r");
FILE *fp_write = fopen("../textArranged.txt", "w");
while (!feof(fp_read)){
      currentChar = fgetc(fp_read);
      ...
}

I tried to change the while condition (using getc()), but it didn't work.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

天煞孤星 2025-01-25 14:02:01

feof() 似乎在读取文件的最后一个字节后返回 01 after fgetc() 已经尝试在文件末尾读取一个字节。

fgetc() 尝试在文件末尾读取数据时,fgetc() 返回 -1

如果执行 fputc(x, ...) 并且 x 不在 0...255 范围内,则 fputc( ) 实际上会写入字节 (x & 0xFF)

在几乎所有现代计算机上,(-1 & 0xFF)0xFF,它等于字符 'ÿ'

因此会发生以下情况:

  • ...
  • 您的程序使用 fgetc() 读取文件的最后一个字节
  • 它使用 fputc() 写入该字符
  • ,尽管没有剩余字节在该文件中,feof() 返回 0,因为您尚未尝试读取文件末尾之后的字节。
  • 您的程序调用 fgetc(),并且由于没有剩余字节,fgetc() 返回 -1
  • 您的程序调用 fputc(-1, ...) 来写入字符 'ÿ'
  • feof() 返回 1,因为 fgetc() 已尝试读取文件末尾后的字节。

feof() seems to return 0 after reading the last byte of the file. It returns 1 after fgetc() already made the attempt to read one more byte after the end of the file.

When fgetc() makes the attempt to read data after the end of the file, fgetc() returns -1.

If you perform fputc(x, ...) and x is not in the range 0...255, fputc() will actually write the byte (x & 0xFF).

On nearly all modern computers, (-1 & 0xFF) is 0xFF which equals the character 'ÿ'.

So the following happens:

  • ...
  • Your program reads the last byte of the file using fgetc()
  • It writes that character using fputc()
  • Although there are no more bytes left in the file, feof() returns 0 because you did not make the attempt to read bytes after the end of the file, yet.
  • Your program calls fgetc() and because there are no more bytes left, fgetc() returns -1.
  • Your program calls fputc(-1, ...) which writes the character 'ÿ'.
  • feof() returns 1 because fgetc() already tried to read bytes after the end of the file.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文