我从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
答案 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);
}
}'