我正在阅读一个文件,我正在尝试从该文件中获取第一个字符,并分配给一个变量:currentChar
我收到以下错误消息:
从类型
分配到类型char
FILE {aka struct _IO_FILE}
时不兼容的类型
char inputFile[50] = "hello.txt";
FILE * inFile = fopen(inputFile, "r");
char currentChar;
currentChar = inFile[0];
fclose(inFile);
答案 0 :(得分:2)
FILE
是一个保存元数据的结构(由fopen()
填充),该结构用作影响从文件读取的其他函数的参数。您永远不会直接访问FILE
结构中的内容。
其中一个文件访问函数是fgetc(),它以FILE *
作为参数并返回int
- EOF
(文件结尾)或从如此识别的文件中的下一个字符。
char inputFile[] = "hello.txt";
FILE * inFile = fopen(inputFile, "r");
// inFile == NULL means fopen() failed
if ( inFile != NULL )
{
int currentChar;
currentChar = fgetc( inFile );
// check currentChar for EOF, then do something with it
fclose(inFile);
}
else
{
perror( "fopen() failed" );
}
答案 1 :(得分:0)
DevSolar为您的错误提供了有用的答案,并根据他的建议让您正确阅读文件内容。
然而,一次读取一个字符的文件可能比看起来更微妙:fgetc()
或普通getc()
返回EOF
或 byte ,类型为unsigned char
的值,其类型必须与char
相同,并且不一定代表字符,尤其是如果文件使用多字节编码(如UTF-8)进行编码。这个字节值可以安全地存储到char
变量中,但是如何解释它是程序员的责任,具体取决于实际的文件类型和编码。