读书人

关于指针函数 的返回值有关问题

发布时间: 2013-03-26 09:54:34 作者: rapoo

关于指针函数 的返回值问题

                            
[解决办法]
p = str;//error
strcpy(p, str);
[解决办法]
#include <stdio.h>

char* fun(void)
{
char str[]="hello,world";
char* p = (char *)malloc(12);
strcpy(p, str);
return p;
}

void main()
{
char* p;
p=fun();
puts(p);
free(p);
p = NULL; //防止野指针
}
[解决办法]
在char *fun(void )里做一下修改即可:
static char str[] = "Hello,world!"; //静态全局变量
static char *p; //自动初始化
1.在main()函数里调用fun()时,你声明定义的str[]和指向字符的指针p是局部变量,调用过程中cpu将str[]和p初始化和运算的数据暂时保存在程序的栈中,main()调用结束fun()后,cpu会自动删掉或覆盖栈(栈指针恢复到原调用程序段点处),此时fun()返回的指针p所指向的字符串地址是无效的,说白话也就是str[]和p此时在程序中是没有的。
2.通过加static,将其声明成全局静态变量即可解决。
代码如下:

#include<stdio.h>

char *fun(void )
{
static char str[] = "Hello world!\n";
static char *p;

p = str;
return p;
}

int main()
{

char *p = NULL;

p = fun();
puts(p);

return 0;

}

读书人网 >C语言

热点推荐