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

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


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


...全文
44 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
庄鱼 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);当然不对了

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧