beyondabcd 发表于 2007-8-30 09:05
用函数如果返回一个字符串
<P>#include "stdio.h"<BR>scopy ()<BR>{<BR>char str2[]="form str2,to strl";<BR>return str2;<BR>}</P>
<P>main()<BR>{ char *t;<BR>t=scopy();<BR> printf("%s",t);<BR>getch();<BR>}<BR>我这个为什么不行呀?<BR><BR></P>
neverTheSame 发表于 2007-9-7 23:41
scopy ()<BR>{<BR>char str2[]="form str2,to strl";<BR>return str2;<BR>}<BR>改成:<BR><FONT color=#ee3d11>char*</FONT> scopy ()<BR>{<BR><FONT color=#ee1111>char *str2</FONT>="form str2,to strl";<BR>return str2;<BR>}<BR>就可以.到现在,我也不太明白被数组不行.<BR>
wangxy200696 发表于 2007-9-11 04:02
我看了一小时,头都痛了,这个是printf函数的漏洞,里面好像涉及堆栈溢出问题,在主函数里面调用了一个用char a[]和char *a定义的数组的过程是不一样的
一笔苍穹 发表于 2007-9-11 08:53
char str2[]="form str2,to strl";<BR>这是数组并初始化。str2[]在一个函数中,属于局部变量,函数一返回其值无效,自然就不能使用。<BR>r *str2="form str2,to strl";<BR>这是指针并初始化其指向一个字符串常量,常量存储在程序的.DATA段中,程序运行期间总是存在,因为函数可以返回并继续使用指向它的指针。<BR><BR>与printf无关
wangxy200696 发表于 2007-9-11 17:14
呵呵,版主分析的确实对.不过我在想t等于str2;str2指向的字符数组在过程消失后的内容变的真快
页:
[1]