设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
编程开发讨论区 —— LinuxSir.cn
›
Linux 程序设计专题讨论
›
请教一个C 程序的问题
返回列表
查看:
996
|
回复:
5
请教一个C 程序的问题
[复制链接]
shencrane
shencrane
当前离线
积分
9
IP卡
狗仔卡
发表于 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)
请教高手 为什么会出错啊
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
x11
x11
当前离线
积分
2823
IP卡
狗仔卡
发表于 2007-11-7 16:39:08
|
显示全部楼层
因为u没有分配空间
回复
支持
反对
使用道具
举报
显身卡
szjrabbit
szjrabbit
当前离线
积分
19
IP卡
狗仔卡
发表于 2007-11-7 20:40:36
|
显示全部楼层
Post by
x11;1778715
因为u没有分配空间
可是分配空间以后为什么还是说段错误?
这样修改以后:
char *u;
u=(char*)malloc(20);
FILE *fp;
下面不变.这样编译运行后还是提示说段错误,为什么呢 ?
回复
支持
反对
使用道具
举报
显身卡
xiaoshao_0_0
xiaoshao_0_0
当前离线
积分
485
IP卡
狗仔卡
发表于 2007-11-7 21:20:12
|
显示全部楼层
最后还有free(u)阿,呵呵。
回复
支持
反对
使用道具
举报
显身卡
remote fish
remote fish
当前离线
积分
704
IP卡
狗仔卡
发表于 2007-11-7 23:18:05
|
显示全部楼层
省略 free(u) 不会导致段错误, 反而是不正确的 free 可能导致错误, 比如二次释放. 而且程序结束后也会被系统自动释放.
如果楼主修改了代码后没有忘记重新编译, 而执行还是出错的话, 那么确实很奇怪, 我这里执行是没有问题的, 而且代码上看也应该没有什么问题了. 也不排除楼主修改代码后忘了保存或是其它手误现象.
楼主可以在编译的时候加上 -g , 用 gdb 跟着跑一下, 段错误后 bt 看看究竟死在哪里
回复
支持
反对
使用道具
举报
显身卡
gamedragon
gamedragon
当前离线
积分
568
IP卡
狗仔卡
发表于 2007-11-8 09:44:26
|
显示全部楼层
LZ把这句
fgets(u,10,fp);
改成
fgets(u, 20, fp);
应该就OK,应该是字符串末尾没0的原因。
LZ可以man一下fgets。
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表