fscanf问题 - 无法从文件中提取字符串

问题描述 投票:-1回答:2

当我使用getc时,程序正在运行,但它不能使用此代码。我尝试打印随机文本,而循环它打印为NULL。

void main()
{
    FILE *fp;
    char *str=NULL;
    char s;

    fp=fopen("text.txt","r");
    if(fp==NULL)
    {
        printf("\nCAN NOT OPEN FILE");

        exit(EXIT_FAILURE);
    }
 while(fscanf(fp,"%s",str)!=EOF) 
{
      printf("%s",str); //not taking any values in str,prints NULL 
  }

    fclose(fp);

}
c scanf file-handling fgets
2个回答
0
投票

问题出在这个声明中:

char *str=NULL;

由于您使用fscanf读取字符数组的单词,因此必须将它们读入有效的内存位置。所以str应该是一个char数组,其长度应该等于文件中最长的单词加1(对于空终止)。

所以将上面改为:

char str[256];

7.21.6.2 fscanf函数 ...

12转换说明符及其含义如下:

s - 匹配一系列非空白字符。如果不存在l length修饰符,则相应的参数应该是指向大小足以接受序列的字符数组的初始元素的指针以及将自动添加的终止空字符。


0
投票

这里

char *str=NULL;

str是一个指针变量&它用NULL初始化,这是非常好的但是要存储到str中,即从文件中读取单词,并存储到str它应该有有效的内存。因此要么为str动态分配内存

str = malloc(SIZE); /* define SIZE */

或者使用像。一样的字符数组

char str[100]; /* let say each word of file is less than 100 char's */

例如

char str[100];
while(fscanf(fp,"%s",str)!=EOF) {
      printf("%s",str); 
}

而不是使用void main() { }

int main(void) {
    /* some_code */
    return 0;    
}

C Standard可以看到5.1.2.2.1程序启动。

© www.soinside.com 2019 - 2024. All rights reserved.