string 转为char* 作为函数参数回传后变成空字符串

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mpp_king/article/details/88763120
int ReturnPoint(char* pStr)
{
	string temp = "hello"; //是一个临时变量,函数结束时,就会被释放

	//第一种方法
	pStr = (char*)temp.c_str(); //pStr最后指向的内容是乱值,因为temp对象被析构,其内容被处理

	//第二种方法
	strcpy(pStr,(char*)temp.c_str());

	//第三种方法
	memcpy(pStr,temp,strlen(temp));

	return 0;
}

int main()
{
	char buf[10];
	memset(buf,0,10);
	ReturnPoint(buf);
	cout<<buf;

	return 0;
}

第一种方法,buf为空。

第二种、第三种可以实现值回传。

注:strcpy和memcpy的区别(点击打开原文地址)

1、strcpy:字符串复制,不仅会复制其字符串就连其结尾的字符‘\0’也会被复制过去,其复制遇到\0后就结束了;

2、memcpy:是内存复制,他不仅可以复制字符串还可以复制任意内容,如字符串数组,结构体等;而且memcpy并不会遇到\0就结束,而是复制你在第三个参数中指定的字节数。

相对而言,memcpy要比strcpy用途要广泛的多,一般我们只需要复制字符串就可以选择strcpy,但是数组或者结构体,那就不要犹豫了,直接上memcpy吧。

猜你喜欢

转载自blog.csdn.net/mpp_king/article/details/88763120