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’作為字符串的邊界,當輸出string時,string可以看成是數(shù)組,因為string接受一個地址,那必然是首地址,但string長度并非是1,所以后面的空間并未初始化,則會出現(xiàn)亂碼。
string本身就是一個數(shù)據(jù)結(jié)構(gòu)。
可以通過at來獲取內(nèi)容,即s.at[0].
告知:
當我們用
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)亂碼。
另補充冷知識: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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
C語言數(shù)據(jù)結(jié)構(gòu)時間復雜度及空間復雜度簡要分析
我們在進行編程時,往往會開發(fā)諸多的算法,那么我們怎么在那么多算法中找到最好的那個呢?本文主要介紹時間和空間復雜度概念及時間復雜度的求解,預祝讀者學習愉快2021-10-10
Mac下使用Eclipse編譯C/C++文件出現(xiàn) launch failed, binary not found 解決方
這篇文章主要介紹了Mac下使用Eclipse編譯C/C++文件出現(xiàn) launch failed, binary not found 解決方案,需要的朋友可以參考下2014-10-10
OpenCV中findContours函數(shù)參數(shù)詳解
Opencv中通過使用findContours函數(shù),簡單幾個的步驟就可以檢測出物體的輪廓,很方便。本文將和大家一起探討一下findContours方法中各參數(shù)的含義及用法,感興趣的可以了解一下2022-08-08

