为什么不打印这个简单的C程序?

时间:2018-02-07 01:10:53

标签: c printing

我正在尝试制作一个基本的C程序来读取文件,但由于某些原因,当我使用make Test1运行它然后。/Test1 test1.txt我得到“错误:'s'可能在此函数中使用未初始化的“。

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char** argv) {


    if (argc < 2) {
        printf("error\n");
        return 0;
    }

    FILE *fp = fopen(argv[1], "r");

    if (fp == NULL)  {
        printf ("error\n");
        return 0;
    }

    char * s;

    int r = fscanf(fp, "%s", s);

    while (r != EOF) {
        printf("%s\n", s);
        r = fscanf(fp, "%s", s);
    }

    return 0;
}

2 个答案:

答案 0 :(得分:1)

问题在于fscanf。它不会分配任何内存,你必须自己做,例如通过做

char *s = malloc(100);  //array s is stored in the heap memory

char s[100];  //array s is stored in the stack

要确保fscanf不会读取超过100个字符(因为这是我们获得的内存量),您必须编写

int r = fscanf(fp, "%99s", s); 

答案 1 :(得分:0)

当你正在读取被设置为NULL的s时,它应该崩溃,这意味着你没有留下来读入的内存,它会导致程序崩溃,具体取决于操作系统依赖于错误

char s[1000]至少给它一些记忆来阅读。