user-0 提问: 段错误（核心已转移）

回复:
user: user-1
content: 引用 3 楼 dear_Alice_moon 的回复:[quote=引用 2 楼 zhao4zhong1 的回复:] Windows： 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  Linux： 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令  赵老师，好厉害啊，膜拜一下。  其实你写的是啥，我都有些看不懂，在这里膜拜吹捧你一下。 (^__^)  现在该走了，下班了！  好累，一直996的工作，我都想辞职了。  [/quote] 一言以蔽之：不明觉厉，人生苦短。

user: user-1
content: 就是你前面的blabla……，浓缩成一句话就是“不明觉厉，人生苦短。”

user: user-2
content: 引用 4 楼 zhao4zhong1 的回复:[quote=引用 3 楼 dear_Alice_moon 的回复:] [quote=引用 2 楼 zhao4zhong1 的回复:] Windows： 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  Linux： 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令  赵老师，好厉害啊，膜拜一下。  其实你写的是啥，我都有些看不懂，在这里膜拜吹捧你一下。 (^__^)  现在该走了，下班了！  好累，一直996的工作，我都想辞职了。  [/quote] 一言以蔽之：不明觉厉，人生苦短。[/quote]  赵老师能不能说的“通俗易懂”些？   您说的“一言以蔽之：不明觉厉，人生苦短。” ，我个人资质鲁钝，无法理解！

user: user-2
content: 引用 2 楼 zhao4zhong1 的回复:Windows： 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  Linux： 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令  赵老师，好厉害啊，膜拜一下。  其实你写的是啥，我都有些看不懂，在这里膜拜吹捧你一下。 (^__^)  现在该走了，下班了！  好累，一直996的工作，我都想辞职了。

user: user-1
content: Windows： 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  Linux： 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令

user: user-3
content: #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include <stdbool.h> #include<string.h> #include <errno.h>  int main(int argc,char *argv[]) {     int arg;     char data[20]={0};     bool flag=false;   //判断输入Id是否存在     FILE *fp;      if (argc < 2)         return 0;      /*$./student -i 101 zhangsan studentinfo.txt       选项i完成插入功能，如果101已经存在，则报错，不执行插入操作.如果101不存在，       把指定参数的内容追加到文件的末尾新的一行*/     if(!strcmp(argv[1],"-i")){         //fp = fopen("studentinfo.txt","a+");         fp = fopen("studentinfo.txt","r");         if (!fp) {             printf("Open file error: %s\n", strerror(errno));             exit(0);         }         while(!feof(fp)){             fgets(data,20,fp);             if(strstr(data,argv[2])!=NULL) flag=true;         }         if(flag==true)             printf("该数据已存在");         else{             fseek(fp,0,2);             fprintf(fp,"%s%s",argv[2],argv[3]);         }         fclose(fp);     }      /*$./student -d 101  studentinfo.txt       选项d完成删除操作，如果学号101不存在，退出程序并给出提示，       如果学号101存在，则删除该行，并给出相应提示*/     if(!strcmp(argv[1],"-d")){         fp=fopen("studentinfo.txt","rb+");         if (!fp) {                 printf("Open file error: %s\n", strerror(errno));                 exit(0);         }         while(!feof(fp)){             fgets(data,20,fp);             if(strstr(data,argv[2])!=NULL)                 flag=true;         }         //if(flag=true){         if(flag == true){             FILE *ff;             char c[20];             //ff=fopen("temp.txt","a");             ff=fopen("temp.txt","r");             if (!ff) {                 printf("Open file error: %s\n", strerror(errno));                 exit(0);             }             while(fgets(c,20,fp)){                 if(strcmp(c,argv[2])!=0) fputs(c,ff);             }             remove("studentinfo.txt");             rename("temp.txt",argv[3]);             printf("删除成功");             fclose(ff);         }         else             printf("这行数据不存在");         fclose(fp);      }      /*$./student -s 101  studentinfo.txt       选项s完成查询操作，如果学号101不存在，退出程序并给出提示，       如果学号101存在，则把该行数据显示出来*/     if(!strcmp(argv[1],"-s")){         fp = fopen("studentinfo.txt","rb+");         if (!fp) {             printf("Open file error: %s\n", strerror(errno));             exit(0);         }         char data1[20]={0};         while(!feof(fp)){             fgets(data,20,fp);             if(strstr(data,argv[2])!=NULL){                 flag=true;                 memcpy(data1,data,strlen(data)+1);             }         }         //if(flag=true)         if(flag==true)             printf("%s",data1);         //if(flag=false)         if(flag==false)             printf("这行数据不存在");     } } 参考一下吧，问题可以对照找一下； 若以追加的形式打开文件，文件指针指向文件末尾，这样试读不到数据的。 文件指针需要判断返回值的，即文件是否打开成功。 文件指针需要接收fopen的，有一个if中，只有fopen，并没有得到它的返回值。 问题建议一一对比查找一下