#include<stdio.h>
int main()
{
FILE *fp;
fp = fopen("test22.txt","r");
while(fgetc(fp)!=EOF)
printf("%c",*(fp->_ptr));
return 0;
}
我正在使用Code :: Blocks。我知道'_ptr'成员指向缓冲区中的下一个字符。该文件包含文本'Hello World!'。如何使用FILE结构的成员修改我的程序以打印第一个字符?
答案 0 :(得分:1)
#include<stdio.h>
int main()
{
FILE *fp;
fp = fopen("test22.txt","r");
if(fp == NULL){
printf("File did not opened.\n");
return -1;
do{
printf("%c",*(fp->_ptr));
} while(fgetc(fp)!=EOF);
fclose(fp);
return 0;
}
答案 1 :(得分:1)
使用FILE
类型的成员是极其危险且不可移植的。虽然_ptr
可能指向流的当前缓存部分,但绝对不能保证_ptr [0]始终指向文件中的第一个字符。请参阅here其中所述的内容:
FILE对象的内容并不意味着从和标题的函数外部访问;事实上,可移植程序只能以指针的形式使用它们来识别流,因为对于某些实现,甚至指针本身的值对于识别流也很重要(即指向FILE对象副本的指针可能与原始指针的解释不同。
答案 2 :(得分:0)
fgetc将缓冲区前进到下一个字符。您可以在fgetc呼叫之前保存/打印第一个字母,使用do-while,呼叫倒带等。
答案 3 :(得分:0)
一种可能的解决方案是利用“赋值时返回引用”,这意味着在执行此类操作后,将返回对其结果的引用,然后可以使用该引用,例如,与EOF进行比较
使用您的代码:
#include<stdio.h>
int main()
{
FILE *fp;
fp = fopen("text22.txt","r");
char buffer;
while((buffer=fgetc(fp))!=EOF)
printf("%c",buf);
return 0;
}