首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2013-03-26 
关于指针函数 的返回值问题[解决办法]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;

}

热点排行