免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4832 | 回复: 27
打印 上一主题 下一主题

[C] 求教关于指针传递的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-26 13:30 |只看该作者 |倒序浏览
如下代码,正常应该输出 abcde。但是编译后运行结果为乱码。请问问题出在哪里?

#include <stdio.h>

#define LEN 5

int main() {
&nbsp;&nbsp;&nbsp;char *bb;
&nbsp;&nbsp;&nbsp;foo(bb);
&nbsp;&nbsp;&nbsp;printf("%s",bb);
&nbsp;&nbsp;&nbsp;return 0;
}

foo(char *aa) {
&nbsp;&nbsp;&nbsp;char a[LEN]="abcde";
&nbsp;&nbsp;&nbsp;aa = a;
}

论坛徽章:
0
2 [报告]
发表于 2008-07-26 13:32 |只看该作者
这个,问题太多了吧。

论坛徽章:
0
3 [报告]
发表于 2008-07-26 13:35 |只看该作者
楼上,指点一下啦

论坛徽章:
1
2017金鸡报晓
日期:2017-01-10 15:19:56
4 [报告]
发表于 2008-07-26 13:42 |只看该作者
foo(char *aa) {
   char a[LEN]="abcde";
   aa = a;
}
这个函数a是栈内存函数结束被销毁 之后aa指向的值不可预见
“abcde”size为6赋a它肯定装不下

看看林悦的高质量编程吧

论坛徽章:
0
5 [报告]
发表于 2008-07-26 13:44 |只看该作者
这个问题林大侠的书上好像说过。
另外,如果char a[len] = "abcde"; len最好>=6吧。
再有,foo函数没有返回值最好void一下,函数声明也没有,编译能通过么

论坛徽章:
3
天蝎座
日期:2014-10-25 13:44:312015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:48:31
6 [报告]
发表于 2008-07-26 14:10 |只看该作者
原帖由 cheng_lai_shun 于 2008-7-26 13:42 发表
foo(char *aa) {
   char a[LEN]="abcde";
   aa = a;
}
这个函数a是栈内存函数结束被销毁 之后aa指向的值不可预见
“abcde”size为6赋a它肯定装不下

看看林悦的高质量编程吧



说的对,但是貌似解答这个问题,不太对,把char a[LEN]定义为全局变量试试看吧。

论坛徽章:
0
7 [报告]
发表于 2008-07-26 14:11 |只看该作者
原帖由 spooky 于 2008-7-25 21:35 发表
楼上,指点一下啦


#include <stdio.h>

#define LEN 5

int main() {
   char *bb;
   foo(bb);
   printf("%s",bb);
   return 0;
}

foo(char *aa) {
   char a[LEN]="abcde";
   aa = a;
}

1) foo函数没有先声明就直接在main里调用了
2) a[LEN] = "abcde" 已经越界
3) foo的参数要传入指针的指针
4) foo里面字符串分配在栈上,返回foo后这个字符串所在的内存就无效了
5) foo没有返回值类型,如果省略默认是int,那么需要在最后return一个int值吧。
这么一小段代码就这么多错,需要“指点”那一个地方?

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
8 [报告]
发表于 2008-07-26 14:11 |只看该作者
不错的改错题

论坛徽章:
0
9 [报告]
发表于 2008-07-26 14:18 |只看该作者
原帖由 cheng_lai_shun 于 2008-7-26 13:42 发表
foo(char *aa) {
   char a[LEN]="abcde";
   aa = a;
}
这个函数a是栈内存函数结束被销毁 之后aa指向的值不可预见
“abcde”size为6赋a它肯定装不下

看看林悦的高质量编程吧


谢谢。关键问题确实在这里。修改为如下代码,运行通过。
#include <stdio.h>

#define LEN 6

int main() {
&nbsp;&nbsp;&nbsp;char bb[LEN];
&nbsp;&nbsp;&nbsp;foo(bb);
&nbsp;&nbsp;&nbsp;printf("%s\n",bb);
&nbsp;&nbsp;&nbsp;return 0;
}

foo(char *aa) {
&nbsp;&nbsp;&nbsp;char *a="abcde";
&nbsp;&nbsp;&nbsp;int i=0;
&nbsp;&nbsp;&nbsp;for(i=0;i<=LEN;i++,aa++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*aa=a[i];
}

论坛徽章:
0
10 [报告]
发表于 2008-07-26 14:22 |只看该作者
原帖由 emacsnw 于 2008-7-26 14:11 发表


#include

#define LEN 5

int main() {
   char *bb;
   foo(bb);
   printf("%s",bb);
   return 0;
}

foo(char *aa) {
   char a[LEN]="abcde";
   aa = a;
}

1) foo函数没有先声明就 ...

讲地很好
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP