我正在传递一个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.