[問題] string 和 char*

看板C_and_CPP作者 (幻日\)時間13年前 (2011/09/28 22:36), 編輯推噓3(309)
留言12則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 問題(Question): 其實我的問題已經解決了,只是有點好奇所以上來發問。 問題是這樣: 有一個函式的其中一個引數是吃 char*,他並不吃 string這個結構 所以為了解決這個辦法我就這樣處理 string s_name; //我把想要的字串運算存到s_name// char *name = new char[s_name.size()]; for(int i=0;i<s_name.size();i++) name[i] = s_name[i]; 我覺得這樣很合理,不過這個程式執行完以後 name 裡面除了有s_name的內容以外,後面還多了一些亂碼 我後來試了半天覺得是new的問題,不過也沒有更好的解決方式 直到後來我發現 string結構裡面有 c_str()這個函式可以幫我轉 我就這樣寫 char *name = new char[s_name.size()+1]; strcpy (name, s_name.c_str()); 問題就解決了 但我現在還是不清楚之前的問題是什麼?? 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.133.158.169

09/28 22:51, , 1F
結束字元補 '\0'
09/28 22:51, 1F

09/28 23:03, , 2F
恩 有效的長度是size 但結尾要'\0'
09/28 23:03, 2F

09/28 23:04, , 3F
發現你後面知道要new size+1呀... 有點矛盾喔XD
09/28 23:04, 3F

09/28 23:08, , 4F
確實第一段 new 沒+1
09/28 23:08, 4F
XD +1 是我在C++ Reference 上找到的範例

09/29 01:31, , 5F
用s_name.c_str() 就好了
09/29 01:31, 5F

09/29 01:33, , 6F
不過他是const char*
09/29 01:33, 6F

09/29 01:52, , 7F
噗,沒看到後面的strcpy:P
09/29 01:52, 7F

09/29 01:54, , 8F
不過一般除非function要修改s_name的內容才會是char*
09/29 01:54, 8F

09/29 01:55, , 9F
否則大半應該會是 const char*
09/29 01:55, 9F

09/29 09:50, , 10F
string是沒有包含'\0'的字串,但是c的字串是字元陣列
09/29 09:50, 10F

09/29 09:52, , 11F
並且結尾有\0. 不過你只需要使用string就好.混用是大問
09/29 09:52, 11F

09/29 09:52, , 12F
09/29 09:52, 12F
我知道了,感謝大家的回答 ※ 編輯: frank770504 來自: 220.133.158.169 (09/29 15:04)
文章代碼(AID): #1EWp3oIi (C_and_CPP)