看板 C_and_CPP 關於我們 聯絡資訊
初學者在不知道有 #include <cstring> 的情況下 一般我們宣告一個字串的方式是 char str[] = "Hello"; //字元陣列 或是使用 指標來宣告字串 char *str = "Hello"; Q1. 以上應該沒有理解錯誤吧? ============================================ 我使用 strcat 串接兩個字串 char str1[] = "Hello"; char str2[] = "World"; strcat(str1, str2); cout << str1 << endl; // 印出HelloWorld Q2. 以上應該也沒有問題吧? ============================================= 後來我把字串改成用指標宣告 char *str1 = "Hello"; char *str2 = "World"; strcat(str1, str2); cout << str1 << endl; 一編譯程式就當掉了! Q3. 到底是出了什麼問題?? ============================================= 我又使用 strcpy 玩玩看 char str1[] = "America"; char str2[] = "Taiwan"; strcpy(str1, str2); cout << str1 << endl; // 印出Taiwan Q4. 這裡也沒有錯吧? ============================================== 換成用指標宣告str2字串 char str1[] = "America"; char *str2 = "Taiwan"; strcpy(str1, str2); cout << str1 << endl; // 印出Taiwan Q5. 這裡應該也是正確的吧? =============================================== 我不死心又做了另一個測試 char *str1 = "America"; char *str2 = "Taiwan"; strcpy(str1, str2); cout << str1 << endl; Q6. 程式又掛掉了? 為什麼... =============================================== 我自己得到一個結論 好像用指標宣告的字串 你不能對它改變作任何修改 其實 應該就是對指標的概念不夠清楚 還請各位成是先進指點迷津... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.251.201.200
gg1122:置底文有你要的答案 05/01 19:17
jackace:Q2理解就有問題了後面懶得看 05/01 19:22
CaptainH:雙引號括起來的叫做字串常數, 型態是 const char * 05/01 19:28
CaptainH:你去更動唯讀的記憶體 那當然就出錯 05/01 19:28
junny0204:4. 不要試圖用 char* 去更改一個"字串常數" 05/01 19:29
junny0204:請問 jaclace大大 Q2哪裡有問題? 指點一下好讓小弟擺脫 05/01 19:30
junny0204:錯誤的觀念... 05/01 19:31
xvid:如果置底看不懂 把所有關鍵字google一遍 提示你 常數(const) 05/01 19:43
tjjh89017:Q2會有問題吧 array沒那麼長啊 05/01 19:46
tjjh89017:是說都用C++了,好string不用嗎? 05/01 19:47
diabloevagto:Q2會炸掉,沒炸掉是運氣好 05/01 19:52
diabloevagto:你用char* 指向的都是const,你不應該去修改const 05/01 19:54
prismwu:你Q2的寫法意思是 偷偷的在不屬於自己的空間放東西 05/01 19:55
prismwu:偷偷放不一定會炸掉 所以你的決果剛好沒有錯 05/01 19:56
junny0204:to xvid: 剛剛很認真看了置底文第四點 已經懂了 謝謝! 05/01 20:39
junny0204:to tjh89017, diabloevagto, prismwu 原來要初始 05/01 20:40
junny0204:化 str1的 長度 char str1[80] ={'\0'}; 05/01 20:42
scwg:怎麼大家都唉唉叫 Q2 會炸, 明明從 Q1 起就通通炸光光了啊XD 05/01 22:51
diabloevagto:Q1怎麼會炸掉?最後會自動加上\0不是嗎 05/01 23:03
VictorTom:Q1 被cat上去的那個array空間會炸:) 05/01 23:13
BombCat:Q1的str1空間不夠來裝 05/01 23:14
bibo9901:其實樓上們講的是Q2. 不過原po的排版實在是... 05/01 23:15
VictorTom:忽然發現我中文有問題, 講str1比較清楚....XD 05/01 23:15
BombCat:原來題號是放在問題下耶 05/01 23:18
VictorTom:囧rz 05/02 00:25
diabloevagto:這排版有很大的進步空間 05/02 02:00
junny0204:哈哈 真的很抱歉 == 今天真的學到很多! 05/02 02:01