欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c++之解決char轉(zhuǎn)string時出現(xiàn)的亂碼問題

 更新時間:2023年08月01日 10:26:44   作者:u010905359  
這篇文章主要介紹了c++之解決char轉(zhuǎn)string時出現(xiàn)的亂碼問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

c++ char轉(zhuǎn)string時出現(xiàn)的亂碼問題

刷題遇到的問題。大致是這樣,需要將一個字符串提取中間一部分,然后轉(zhuǎn)為整形,通過整形轉(zhuǎn)化為字符型,最后返回一個字符串。

若是用

char c ;
string s = &c;

則會出現(xiàn)亂碼,內(nèi)容為字符串s加上亂碼。

最后發(fā)現(xiàn)原因是:char沒有’\0’作為字符串的邊界,當(dāng)輸出string時,string可以看成是數(shù)組,因?yàn)閟tring接受一個地址,那必然是首地址,但string長度并非是1,所以后面的空間并未初始化,則會出現(xiàn)亂碼。

string本身就是一個數(shù)據(jù)結(jié)構(gòu)。

可以通過at來獲取內(nèi)容,即s.at[0].

告知:

當(dāng)我們用

char c ;
string s = &c;
cout<<s.length();`

結(jié)果是16

char c ;
string s;
s = &c;
cout<<s.length();

結(jié)果會是12

可以思考下原因。

另一種做法是嘗試用char*或char[]來保存變量,此時用string接收不會出現(xiàn)亂碼。

另補(bǔ)充冷知識:sizeof(string) = 28;

c++ string 轉(zhuǎn) char * 出現(xiàn)亂碼 內(nèi)存共用問題

系統(tǒng):unbuntu16.04 IDE:vscode

出現(xiàn)亂碼

std::string str = "Hello Word";
char* p1 = str.c_str();  //出現(xiàn)亂碼
char* p2 = str.data();  //出現(xiàn)亂碼

出現(xiàn)內(nèi)存共用

后面的字符串會覆蓋之前的:

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;

打?。?/p>

s1:1
s2:11
s3:111
s4:1111
s4:1111   //出現(xiàn)后者覆蓋前面所有
s4:1111   //出現(xiàn)后者覆蓋前面所有
s4:1111   //出現(xiàn)后者覆蓋前面所有
s4:1111   //出現(xiàn)后者覆蓋前面所有

解決方法

(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()); 

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論