遇见段错误怎么办

C语言 码拜 10年前 (2015-05-11) 1280次浏览 0个评论

#include<stdio.h>
#include<string.h>
int main(int argc,char *argv[])
{
FILE *fp=fopen(“a.txt”,”r”);
char buffer[4096];
fgets(buffer,sizeof(buffer),fp);
fprintf(fp,”%s”,buffer);
return 0;
}

程序编译没有错误,但是运行之后显示段错误,问题是在哪里呢?

4分
应该是没有问题,你再试试
8分
FILE *fp=fopen(“a.txt”,”r”); //没有判断文件打开是否成功
char buffer[4096];
fgets(buffer,sizeof(buffer),fp);  //这里没有给\0留空间, 很可能读取后, 没有\0结束.
fprintf(fp,”%s”,buffer);  //  前面打开是”r”, 表明是只读取的, 写入肯定会失败.  并且可能由于前面没有\0结束导致访问越界.
8分
Windows:
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。

Linux:
进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’
使用命令
gdb 运行程序名 core或core.数字
进入gdb然后使用bt命令
可以查看进程意外退出前函数调用的堆栈,内容为从上到下列出对应从里层到外层的函数调用历史。
如果进程意外退出不产生core文件,参考“ulimit -c core文件最大块大小”命令


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明遇见段错误怎么办
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!