我将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);
}
答案 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.