c - 给出段错误的简单程序,无法找出奇怪的行为



我正在传递一个txt文件作为命令行参数并将其内容显示到标准输出。我想在程序开始时创建 5 个整数变量(n,a,b,i,temp)。但是一旦我声明了超过 2 个整数,程序就会给我一个段错误。如果我注释掉第三个 int 声明 (int b),程序运行良好。另外,我在 ubuntu 上运行。

main(int argc, char *argv[]){
    int n;
    int a;
    int b;
//  int i;
//  int temp;
    char *s;
    if(argc!=2){
            printf("not enough arguments provided!!n");
            exit(-1);
    }
    FILE *fp = fopen(argv[1],"r");
    while((s=fgets(s,5,fp))!=NULL){
            n = atoi(s);
            printf("%d",n);
}
    fclose(fp);
}

您的fgets(s,5,fp)读取到未初始化的指针中。您必须分配将读取数据放入的存储。

char *s;更改为char s[5];

编辑:同时更改您的while循环条件:

while(fgets(s,5,fp)) {

您还应该检查 fopen() 是成功还是失败。

s是一个

未初始化的指针。在调用fgets时,第一个参数需要是一个可以复制到内容的位置。 s没有指向任何地方(或垃圾),并尝试复制到该位置是导致错误的原因。

只需声明:

char s[1] ; // Instead of char *s ; or declare it as an character array to 
            // to the size you may require.

相关内容

  • 没有找到相关文章

最新更新