UNIX下c编程的奇怪问题

angel518 2009-06-08 05:58:50
有文件,内容如下:
fjdhh大幅度#的ddfdl@@
偶定义了一个数组buf[50],先fgets把文件内容读到buf中,然后用变量k遍历,如下:
while(buf[k]!=NULL)
printf("%s",buf[k]);
可编译的时候总要报错:
(coredump)
请问这是怎么回事?难道buf[k]!=NULL有问题?

对尾部的@@,如何用strcmp进行比较呢?
...全文
36 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Joan201401 2009-06-09
  • 打赏
  • 举报
回复
UP
happybeginner 2009-06-09
  • 打赏
  • 举报
回复
贴全部代码吧 应该不长~~~ 也不难
jianzhibeihang 2009-06-09
  • 打赏
  • 举报
回复
感觉lz思维很混乱
xharry 2009-06-08
  • 打赏
  • 举报
回复
好久没有用c了,看到楼主的问题,我比较好奇,我来回答你第一个问题:

首先,我怀疑你漏打了k++,因为你的代码中
while(buf[k]!=NULL)
printf("%s",buf[k]);
k始终是它的初始化值,这样会死循环

我觉得你的代码是这样的
int k = 0;
while(buf[k++]!=NULL)
printf("%s",buf[k]);

不过依然有错,楼上已经用朋友回答你的问题,你应该用printf("%c", buf[k]),而不是%s,为什么你用%s会core dump呢。

你定义的是数组,而不是一个指针。所以你可以试试看如下的语句:
char buf[10] = "ssdf";
printf("%x\n", buf) // 打印出ffbffd2c
printf("%x\n", buf[1]) // 打印出73

你可以看到,第一件打出的是一个内存地址,而第二句打出的是73,很明显,它是's'的ASCII码。我们知道printf("%s"...)接受的参数是一个内存地址,而73很明显不是一个标准的地址,通常会core dump

请参考。
帅得不敢出门 2009-06-08
  • 打赏
  • 举报
回复
貌似 楼主的问题不是问题
不是问题的成了问题
  • 打赏
  • 举报
回复
printf("%c",buf[k]);

大哥,我都服了你了
neohope 2009-06-08
  • 打赏
  • 举报
回复
buf[50]你怎么定义与操作的?
once_and_again 2009-06-08
  • 打赏
  • 举报
回复


printf ,scanf 稍不留意,就出现致命的错误.
angel518 2009-06-08
  • 打赏
  • 举报
回复
问题精简错误了!
问题应该是这样的:

有文件,内容如下:
fjdhh#大幅度#的ddfdl#@@
偶定义了一个数组buf[50],先fgets把文件内容读到buf中,然后用变量k遍历,遇到#就把两个#之间的字符串放入temp变量中,如下:
while(buf[k]!=NULL)
printf("%s",temp);
可编译的时候总要报错:
(coredump)
请问这是怎么回事?难道buf[k]!=NULL有问题?

对尾部的@@,如何用strcmp进行比较呢?偶用strcmp(temp,"@@")没用啊,报(coredump)错!
wuyu637 2009-06-08
  • 打赏
  • 举报
回复
printf("%c",buf[k])

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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