关于指针函数 的返回值有关问题
关于指针函数 的返回值问题[解决办法]p str//errorstrcpy(p, str)[解决办法]#include stdio.h char*
关于指针函数 的返回值问题
[解决办法]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;
}