这是一个最小的“工作”示例:
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char* argv[])
{
int num = 10;
FILE* fp = fopen("test.txt", "r"); // test.txt contains character sequence
char* ptr = (char*) malloc(sizeof (char)*(num+1)); // +1 for '\0'
fread(ptr, sizeof(char), num, fp); // read bytes from file
ptr[num] = '\0';
printf("%s\n", ptr); // output: ´╗┐abcdefg
free(ptr);
fclose(fp);
return 0;
}
我想从文本文件中读取一些字母,其中包含字母表中的所有字母。我希望我的数组存储前10个字母,但输出中显示的前3个是奇怪的符号(请参阅printf语句中的注释)。
我做错了什么?
答案 0 :(得分:3)
问题是您的文件是使用UTF-8编码的。虽然UTF-8向后兼容ASCII(这是您的代码将使用的),但存在许多差异。
特别是,许多程序会在文件的开头放置BOM(字节顺序标记)符号,以指示字节的方向。如果使用默认的Windows代码页打印BOM,则会得到您看到的两个符号。
您用于创建文本文件的任何程序都会自动在文件开头插入该BOM。 Notepad ++因此而臭名昭着。检查保存选项并确保将其保存为纯ASCII或不带BOM的UTF-8。这将解决您的问题。