简单的程序给出了段错误,无法弄清奇怪的行为

时间:2011-05-06 16:51:29

标签: c integer segmentation-fault declaration

我将txt文件作为命令行参数传递,并将其内容显示给stdout。我想在程序开始时创建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);
}

2 个答案:

答案 0 :(得分:3)

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

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

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

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

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

答案 1 :(得分:0)

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

请声明:

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