LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 995|回复: 5

请教一个C 程序的问题

[复制链接]
发表于 2007-11-7 14:55:45 | 显示全部楼层 |阅读模式
#include<stdio.h>
#include<stdlib.h>
int main()
{
        char *u;
        FILE * fp;
        system("echo aaaaaaaaaa> temp.txt");
        fp=fopen("temp.txt","r");
        fgets(u,10,fp);
        printf("%s \n",u);
        fclose(fp);
        return 0;
}
执行结果为:
aaaaaaaaa
段错误(core dumped)
请教高手 为什么会出错啊
发表于 2007-11-7 16:39:08 | 显示全部楼层
因为u没有分配空间
回复 支持 反对

使用道具 举报

发表于 2007-11-7 20:40:36 | 显示全部楼层
Post by x11;1778715
因为u没有分配空间


可是分配空间以后为什么还是说段错误?
这样修改以后:
char *u;
u=(char*)malloc(20);
FILE *fp;
下面不变.这样编译运行后还是提示说段错误,为什么呢  ?
回复 支持 反对

使用道具 举报

发表于 2007-11-7 21:20:12 | 显示全部楼层
最后还有free(u)阿,呵呵。
回复 支持 反对

使用道具 举报

发表于 2007-11-7 23:18:05 | 显示全部楼层
省略 free(u) 不会导致段错误, 反而是不正确的 free 可能导致错误, 比如二次释放. 而且程序结束后也会被系统自动释放.

如果楼主修改了代码后没有忘记重新编译, 而执行还是出错的话, 那么确实很奇怪, 我这里执行是没有问题的, 而且代码上看也应该没有什么问题了. 也不排除楼主修改代码后忘了保存或是其它手误现象.

楼主可以在编译的时候加上 -g , 用 gdb 跟着跑一下, 段错误后 bt 看看究竟死在哪里
回复 支持 反对

使用道具 举报

发表于 2007-11-8 09:44:26 | 显示全部楼层
LZ把这句
fgets(u,10,fp);
改成
fgets(u, 20, fp);
应该就OK,应该是字符串末尾没0的原因。
LZ可以man一下fgets。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表