读取文本文件时与fgetc的差异

时间:2013-10-23 12:02:54

标签: c fgetc

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

我有一个文本文件,由记事本生成或直接通过shell在windows os中通过shell生成。

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

将代码块与minggw一起使用。

file.txt的:

TEST

C程序

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

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

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

输出

■T E S T

2 个答案:

答案 0 :(得分:3)

您的代码存在问题,但结果还不错。

您的文件可能是UTF-8,其开头是byte order mark(容易混淆){{3}}。您的程序(正确地)读取和打印BOM的字节,然后在正确的文本之前将其显示为输出中的奇怪字符。

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

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

答案 1 :(得分:0)

试试此代码

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

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

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