c++ string 转 char * 出现乱码 内存共用问题

系统:unbuntu16.04 IDE:vscode

一、出现乱码:

std::string str = "Hello Word"char* p1 = str.c_str();  //出现乱码
char* p2 = str.data();  //出现乱码

二、出现内存共用,后面的字符串会覆盖之前的:

char * s1 =  (char *)data.getWorkNum().c_str();  //string是 s1:1
std::cout<<s1<<std::endl;
char * s2 =  (char *)data.getName().c_str();   //string是 s2:11
std::cout<<s2<<std::endl;
char * s3 = (char *)data.getDepartment().c_str();  //string是 s3:111
std::cout<<s3<<std::endl;
char * s4 = (char *)data.getRoom().c_str();       //string是 s4:1111
std::cout<<s4<<std::endl;

std::cout<<s1<<std::endl;
std::cout<<s2<<std::endl;
std::cout<<s3<<std::endl;
std::cout<<s4<<std::endl;

打印:

s1:1
s2:11
s3:111
s4:1111
s4:1111   //出现后者覆盖前面所有
s4:1111   //出现后者覆盖前面所有
s4:1111   //出现后者覆盖前面所有
s4:1111   //出现后者覆盖前面所有

解决方法

(1):

char * strc = new char[strlen(str.c_str())+1];
strcpy(strc, str.c_str());

(2):

    char c_workNum[data.getWorkNum().length()];  //其中data.getWorkNum()为字符串
    strcpy(c_workNum,data.getWorkNum().c_str()); 

版权声明:本文为weixin_39681471原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。