这段代码 怎么可能有错呢?????

mcseychann 2004-05-04 10:35:50
#include <stdio.h>
#include <string.h>
main()
{
FILE *f;
char ch;
char sqlcom[255];
if(f=fopen("sqlfile","r+")==NULL )
{
printf("sqlfile文件不存在\n");
exit(1);
}
else
{ ch=fgetc(f);
if (ch!=EOF)
{
putchar(ch);
ch=fgetc(f);
}
}
fclose(f);
}

很简单的文件打开嘛(本人只是为了测试,因为在我另外一项目程序中文件操作也 tmd老出错,,闷)
编译的时候 提示警告:
fu.c: In function `main':
fu.c:8: warning: assignment makes pointer from integer without a cast

忽略( 也请高手帮看看)
运行./fu
报错: Segmentation fault (@#$#!%$,,闷,有好多个次程序都报此错,苦闷求助)

gdb 单步调试, 发现是执行到 ch=fgetc(f); 时出错了:
Program received signal SIGSEGV, Segmentation fault.
0x400957bf in getc () from /lib/libc.so.6


高手呀,,请花点时间指点迷津好吗,


...全文
17 9 点赞 打赏 收藏 举报
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
庄鱼 2004-05-05
一楼说得对!
由于f的值是0,引入一个不确定的内存空间(C++约定),所以后续的操作依0地址中的垃圾所指向的内存段进行文件操作,不出错才怪呢!
  • 打赏
  • 举报
回复
liushuaiboy 2004-05-05
楼主不会一直有“数组访问超界,死循环等”的问题吧?换一个编辑器试试
  • 打赏
  • 举报
回复
Wolf0403 2004-05-05
是 Linux 环境,呵呵。要是 Win 98 就是“该程序执行了非法操作,将被关闭”云云了。
  • 打赏
  • 举报
回复
cngdzhang 2004-05-04
不好意思,我也不太清楚,没遇到过啊:(

可能是程序进行了非法操作,比如数组访问超界,死循环等吧?
  • 打赏
  • 举报
回复
saoyu 2004-05-04
段错误,一般非法内存访问导致的
  • 打赏
  • 举报
回复
mcseychann 2004-05-04

To cngdzhang() (
Program received signal SIGSEGV, Segmentation fault. 这个是哪方面的错误啊,
我写程序老会是碰到这个报错,


可以说说吗,
  • 打赏
  • 举报
回复
chenzhilian 2004-05-04
小弟还只是个菜鸟,忘以后多指教!
  • 打赏
  • 举报
回复
woaichenyu 2004-05-04
一楼说的对
  • 打赏
  • 举报
回复
cngdzhang 2004-05-04
if(f=fopen("sqlfile","r+")==NULL )
改为
if((f=fopen("sqlfile","r+"))==NULL )

因为赋值的运算等级最低
那么它是先fopen("sqlfile","r+")==NULL ,再把这个结果赋给f,然后ch=fgetc(f);当然不对了
  • 打赏
  • 举报
回复
相关推荐
发帖
C语言
加入

6.5w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-05-04 10:35
社区公告
暂无公告