如何使用FILE结构的成员打印文件中的第一个字符?

时间:2013-07-02 05:42:14

标签: c codeblocks

#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结构的成员修改我的程序以打印第一个字符?

4 个答案:

答案 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;
}