//对于数组来说,它是一个局部变量,是放在栈里面的,函数返回之后,变量被销毁,内存被回收。#include <stdio.h>char* get_str(){char str[] = {"hello"}; //错误结果return str;}int main(){char* p = get_str();printf("%s/n", p);return 0;}【解决方案】====================(1)用字符串常量指针代替局部变量的数组名//str指针,其值是一个常量,而常量是放在数据段里面的,即便函数返回了,数据段里面的常量数据也还会在,直到程序结束才会消失#include <stdio.h>char* get_str(){char *str = {"hello"}; //正确结果,因为str指向字符串常量return str;}int main(){char* p = get_str();printf("%s/n", p);return 0;}(2)把数组声明为全局的变量(3)使用静态数组,即static char str[] = {"hello"}; (4)最好的解决方案:在主函数中申请空间,调用函数进行字符串的赋值操作,最后在主函数中释放申请的空间。#include <iostream>using namespace std;void f(char* buffer, int size){strncpy(buffer,"ABCD",size);}int main(){int size = 100;char *buffer = (char*)malloc(size); //分配buffer空间f(buffer,size); //调用函数,把指定size长度的字符串赋值给buffercout<<buffer<<endl;free(buffer); //释放buffer空间return 0;}
100字范文,内容丰富有趣,生活中的好帮手!