C语言编程问题,下面的程序输出结果是string,还是无法确定?高手大哥帮忙解释一下,谢谢啦!

程序:#include<stdio.h>#include<string.h>voidfun(char*s){chara[10];strcpy(a,"STRING");s=... 程序:
#include<stdio.h>
#include<string.h>
void fun( char *s)
{ char a[10];
strcpy( a,"STRING");
s=a;
}
main()
{ char *p;
fun(p);
printf("%s\n",p);
}
的输出结果是:
展开
 我来答
匿名用户
2014-08-26
展开全部
为了验证你的程序,我特意在Linux下运行了,结果和Windows上不同,可以说结果是不定的。
你把要注意,p你是作为形参传值进入fun()的,fun从根本上不可能改变p的值。事实也是如此。
换一句话说在运行函数的时候,p被复制给了临时变量s,你的那个s和p根本是两个指针,运行了之后,s指向了你的那个数组a,p没有变。
那么你能改变的是什么呢?
将main中“char *p” 改为 “ char p[]="helloworld" ”,再运行,你就明白了。
给函数传递指针,你可以改变指针所指区域的值,但是你不能改变指针本身的值。
所以你的程序在Linux上运行出现错误。什么也没输出来。
fengweisi520
2014-08-26
知道答主
回答量:23
采纳率:0%
帮助的人:6.4万
展开全部

函数返回时会销毁数组,但指针指向的地址应该没变,格式控制%s不输出任何东西

追问
p指向数组a的首地址,所以最后a[10]={'S','T','R','I','N','G','\0',}后面还有3个元素是不定的,但是输出的时候不是到'\0'就结束吗?后面虽然不定,应该不影响吧?
追答
主函数里的*p指针应该赋初值,参数传递的时候会新开辟一个指针指向和p指向的同一个地址,返回时又销毁这个临时开辟的指针。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式