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]

编程论坛