大家来找茬! 找出错来

wangqiang1101 2012-10-03 11:39:59

指出下面程序的错误之处,并说明原因。
char *function(void *a,int b){
int i=0;
char k[30]="hello world !";
while(*a&&i<b){
*a++=k[i++]
}
a[i]='\0';
return k;
}
...全文
242 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangqiang1101 2012-10-07
  • 打赏
  • 举报
回复
貌似惹众怒了哈 我并不知道无满意结贴 会造成这个样子 我是新来的 很多规矩都不知道 见谅呐 不好意思 !
pathuang68 2012-10-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

这个程序本身就是错的 我知道 我只是想发上来让大家找茬的 你们说的我也知道 只是想看看这个程序还有什么我不知道的错误
[/Quote]

1. 如果9楼以前的那些回复中指出的问题,楼主都很清楚的话,你就根本必要提出这个问题,浪费大家的感情:)
2. 个人感觉楼主不够厚道。其实1楼指出了代码中的问题(明显人家是很用心回答的),为啥不给人家分呢?再说无满意结贴,你自己也得不到反馈的一半分数,有点损己不利人哈。如果我是楼主,我可能会继续问:为什么不能返回局部变量的指针?不过依照楼主的做法,可能即便有人回答得中肯,也未必能得到分数,因为你也可能会说“你们说的我也知道 只是想看看这个程序还有什么我不知道的错误”。
3. 现实中,建议楼主不要采取这种处事的态度,因为这样会让人失去真心想帮你的朋友。

以上建议仅供参考。
g2262938 2012-10-05
  • 打赏
  • 举报
回复
但是我有个疑问,即使返回的是局部变量指针的时,也不会报错,只是说:在调用完函数后,局部变量K的值会变释放掉,从而再是使用该地址时,所指向的值会变成不确定之外,好像没有什么错误!
wizard_tiger 2012-10-04
  • 打赏
  • 举报
回复
三楼正解!
wangqiang1101 2012-10-04
  • 打赏
  • 举报
回复
这个程序本身就是错的 我知道 我只是想发上来让大家找茬的 你们说的我也知道 只是想看看这个程序还有什么我不知道的错误
AnYidan 2012-10-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

根本错误就是返回了局部变量k的地址。
[/Quote]

++
Yiboost 2012-10-04
  • 打赏
  • 举报
回复
测试一下怎么发代码,大家不用理我

char *function(void *a,int b){//大括号应该另起一行开头写(纯个人建议,可以无视)
//为什么 a 是 void* 呢?而不是 char* 呢? (这个不算问题)
int i=0;
char k[30]="hello world !";
while(*a&&i<b){ //1)对于 void* 来说, 判断 *a 是否等于 0 有意义么? 你应该是判断 k[i] 才对吧?
// 2) 还是之前那句, 大括号建议另起一行.
// 3) 建议加多几个空格和括号,看起来舒服很多的.比如: while(*a && (i < b))
*a++=k[i++] // 1) 缺少 ;
// 2) 程序段在开头没有对 a!=NULL进行判断,如果a==NULL,程序立即崩溃.
// (当然,这个可能也是你故意为之,如果是,当我没说.)
// 3) 假如你这个程序的意思是复制字符串的话,那么如果 b>30 怎么办?一大堆乱码了.
// 4) 这句语句,我个人建议还是分开几句来写,特别是初学者.一条语句中应该避免同时出现多个 ++
// 不然如果用错的话,错误很难找出来的.
}
a[i]='\0';
return k;//绝对不可以返回局部指针变量,所以,我觉得,你这里应该是 return a;
//不过,要注意, a 是 void* ,而你返回的类型是 char*
}
魔笛手 2012-10-04
  • 打赏
  • 举报
回复
一楼都把错误所在讲出来了,如果不对参数进行检查的话真的是很危险的事情

[Quote=引用 1 楼 的回复:]
首先提醒一下:发代码一定要用代码括起来,别人容易看....
其次:这段代码有什么用?都不知道有什么用的话,怎么找错误? 只有语法错误才能在不知道代码用途的情况下找错误!!逻辑错误是基本不可能的.

你总不能够先叫别人理解了你这段错误的代码的用途,再提出错误的地方吧?

简单说几点吧:

C/C++ code

char *function(void *a,int b){//大括号……
[/Quote]

max_min_ 2012-10-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

这个程序本身就是错的 我知道 我只是想发上来让大家找茬的 你们说的我也知道 只是想看看这个程序还有什么我不知道的错误
[/Quote]

你这不是调戏我们吗?
wangqiang1101 2012-10-03
  • 打赏
  • 举报
回复
我这个是复制的 我不知道怎么排版啊
firendlys 2012-10-03
  • 打赏
  • 举报
回复
首先提醒一下:发代码一定要用代码括起来,别人容易看....
其次:这段代码有什么用?都不知道有什么用的话,怎么找错误? 只有语法错误才能在不知道代码用途的情况下找错误!!逻辑错误是基本不可能的.

你总不能够先叫别人理解了你这段错误的代码的用途,再提出错误的地方吧?

简单说几点吧:

char *function(void *a,int b){//大括号应该另起一行开头写(纯个人建议,可以无视)
//为什么 a 是 void* 呢?而不是 char* 呢? (这个不算问题)
int i=0;
char k[30]="hello world !";
while(*a&&i<b){ //1)对于 void* 来说, 判断 *a 是否等于 0 有意义么? 你应该是判断 k[i] 才对吧?
// 2) 还是之前那句, 大括号建议另起一行.
// 3) 建议加多几个空格和括号,看起来舒服很多的.比如: while(*a && (i < b))
*a++=k[i++] // 1) 缺少 ;
// 2) 程序段在开头没有对 a!=NULL进行判断,如果a==NULL,程序立即崩溃.
// (当然,这个可能也是你故意为之,如果是,当我没说.)
// 3) 假如你这个程序的意思是复制字符串的话,那么如果 b>30 怎么办?一大堆乱码了.
// 4) 这句语句,我个人建议还是分开几句来写,特别是初学者.一条语句中应该避免同时出现多个 ++
// 不然如果用错的话,错误很难找出来的.
}
a[i]='\0';
return k;//绝对不可以返回局部指针变量,所以,我觉得,你这里应该是 return a;
//不过,要注意, a 是 void* ,而你返回的类型是 char*
}


SP_mah0ne 2012-10-03
  • 打赏
  • 举报
回复
3楼说到点上了
卖萌de猫 2012-10-03
  • 打赏
  • 举报
回复
请先说明下你复制了一段程序在自己的电脑上运行时是想表达什么意思呢。
ioaq 2012-10-03
  • 打赏
  • 举报
回复
return k
jackyjkchen 2012-10-03
  • 打赏
  • 举报
回复
void*不能直接解引用

返回局部数组也是个错误
pathuang68 2012-10-03
  • 打赏
  • 举报
回复
根本错误就是返回了局部变量k的地址。

69,373

社区成员

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

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