大家来找错?

emmix 2008-07-31 06:50:10
Exercise 1-5 What is wrong with this excerpt?

int read(int *ip) {
scanf("%d\n",ip);
return *ip;
}
...
insert(&graph[vert], read(&val), read(&ch));

请问这段程序代码有什么错误。摘录自《程序设计实践》第一章习题1-5。
...全文
330 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
emmix 2008-10-17
  • 打赏
  • 举报
回复
正确解答,请参见网址:
http://topic.csdn.net/u/20070513/21/d5ade1a8-7b79-4a12-8ac3-021a71c4267f.html

emmix 2008-08-04
  • 打赏
  • 举报
回复
我看得书是<The Practice of Programming> 作者 Brian W. Kernighan 和Rob Pike
第一章的习题1-5
colxy 2008-08-04
  • 打赏
  • 举报
回复
scanf("%d\n",ip); //在scanf中存在缓冲区问题,可这样来使用:
a、 while(scanf("%d",ip) == 1)
fflush(stdin);
b、scanf("@%d",ip);//@代表一个空格
c、scanf("%d%*d",ip);
以上几种方法可以防止缓冲区问题。
insert(&graph[vert], read(&val), read(&ch));
//如果是函数调用可以这样;但若是函数声明,则少了函数的返回类型

祝你好运!
小树他爹 2008-08-04
  • 打赏
  • 举报
回复
scanf("%d\n",ip);
应该还是错在这儿,输入是得要多输入一个回车,而这个回车不能直接敲,得在前面家一个‘\’
比如想输入12 得这样”12\回车“
如果不加反斜杠会一直不出结果(等待输入)
c_bee 2008-08-02
  • 打赏
  • 举报
回复
指针ip是调用者传进来的,不是野指针
如果是说这个问题的话,那考的就是调用问题了
haohaokingXP 2008-08-02
  • 打赏
  • 举报
回复


哈哈,挑刺,发现了点异常~~
int read(int *ip) {
scanf("%d\n",ip);
return *ip;
}

在这个时候使用scanf函数的时候,很容易造成缓冲区溢出。
ip是个野指针,
haohaokingXP 2008-08-02
  • 打赏
  • 举报
回复


看不来异常

哈哈,是不是编码规范问题?
九十度黑 2008-08-02
  • 打赏
  • 举报
回复
并非语法错误?那作者可能想说:函数参数是没有必要的,int read(void){}就可以了。(纯属猜测)
你看的书作者是谁?我找找,看看。
emmix 2008-08-02
  • 打赏
  • 举报
回复
我个人感觉是没有错误的。分析如下:
int *a; // 假设a = 0xfff01

read(a); // 编译器会把a中得值考贝到局部变量_a中, 则_a = a = 0xfff01 是一个地址
{
scanf("%d",_a); //从键盘中给地址0xfff01(_a存储)中存入一数值
return *_a; // 把地址0xfff01中存储的值返回。

}

所以我觉得程序按常理来分析应该没有错。希望大家能看看这本书相对应的章节,找到到底是什么问题。或许是我们编程中
视而不见的一些错误,但并非是语法错误。
emmix 2008-08-02
  • 打赏
  • 举报
回复
全部内容我都贴出来了,书上也没有答案。是《程序设计实践》这本书第一章的习题1-5。大家可以参考以下。
jzbem 2008-08-01
  • 打赏
  • 举报
回复
不确定,等高手解答
superhackerzhang 2008-08-01
  • 打赏
  • 举报
回复


如果ip指向的是malloc分配的空间应该不会有问题,若是指向一个变量,则这个变量值会被改变的
mAIroC 2008-08-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hai040 的回复:]
这是全部代码?
[/Quote]
up
hai040 2008-08-01
  • 打赏
  • 举报
回复
这是全部代码?
大刀顽童 2008-08-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lixun_21 的回复:]
C/C++ codescanf("%d\n",ip);//要吧\n去掉 不然输入时会要求多输入一个回车符!!
[/Quote]
emmix 2008-08-01
  • 打赏
  • 举报
回复
scanf("%d\n",ip); //要吧\n去掉 不然输入时会要求多输入一个回车符!! 这个回车是我误打上去的,除此之外还有什么错误?
vinuslong 2008-08-01
  • 打赏
  • 举报
回复
好像没有错误
strongpan 2008-08-01
  • 打赏
  • 举报
回复
没明白。。有结论嘛?
novice2008 2008-08-01
  • 打赏
  • 举报
回复
是insert错了,声明没类型。。。
novice2008 2008-08-01
  • 打赏
  • 举报
回复
我刚试了下
#include <stdio.h>
int read (int *);

int main()
{
int * ip;
int n;
n = read(ip);
printf ("%d", n);
return 0;
}


int read(int *ip) {
scanf("%d",ip);
return *ip;
}
完全可以运行。。。
加载更多回复(11)

70,035

社区成员

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

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