关于printf函数.大家请看看.............
今天偶尔看到这么个程序:#include <stdio.h>
char *test(char *p)
{
int i;
char a[100]="I love you!";
p=a;
printf("%s\n",p);
return(p);
}
int main(void)
{
char *p, *q;
p="there is a example";
q=test(p);
printf("\n截后的串为:%s\n",q);
return 0;
}
如果这样运行,程序会输出两个"I love you!";
但是,如果你把test函数里面的printf语句注释掉,那么程序将会输出乱码.
我大胆作了个猜测如下:
如果你不加printf在test里面,那么由于在test函数运行期间,a有定义,而在其结束之后,a将是未定义的,所以p也就是未定义的,亦即返回值是未定义的,所以,主函数会输出乱码.
如果你加printf在test里面,由于prinitf叫做"格式化输出语句",所以我想,问题是不是"格式化"引起的.因为格式化,所以printf会按%s,也就是字符串的格式来格式p,在该语句执行之后,p就变成了一个字符串,而返回值也就变成了指向该字符串的首地址.所以主函数会正确运行.
各位,兄弟我也是个新手,不知道所作的猜测是否正确.所以,请各位明白该问题的指教,谢谢!!!!!
就当作是对一个新手的支持!!!!!!!!!!!