系统: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());