0

我从 C 开始,我愿意了解某些条件。

我有一个文本文件,由记事本生成或直接通过 shell 在 Windows 操作系统中通过 echo 生成。

运行时,输出显示额外的字符。我做错了什么?如何以安全的方式逐字符读取文本文件?

将代码块与 minggw 一起使用。

文件.txt:

TEST

C程序

void main()
{
   int i;
   FILE *fp;

   fp = fopen("file.txt","r");

   while ((i = fgetc(fp)) != EOF)
   {
      printf("%c",i);
   }
}

输出

 ■测试

4

2 回答 2

3

您的代码有问题,但结果很好。

您的文件可能是 UTF-8,开头带有(令人困惑的)字节顺序标记。您的程序正在(正确地)读取和打印 BOM 的字节,然后这些字节在输出中显示为正确文本之前的奇怪字符。

当然,UTF-8 永远不需要字节顺序标记(它是 8 位字节!),但这并不能阻止一些不太熟悉的程序包含一个字节顺序标记。Window 的记事本是此类程序列表中的第一个程序。

更新:我没有考虑您的字母之间的间距,这当然表示 16 位输入。那就是你的问题了。您的 C 代码没有读取宽字符。

于 2013-10-23T12:15:14.153 回答
0

试试这个代码

void main()
{
   int c,i;
   FILE *fp;

   fp = fopen("file.txt","r");

   while ((i = fgetc(fp)) != EOF)
   {
     printf("%c",i);
   }
}'
于 2013-10-23T12:23:18.040 回答