看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) C 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) string.h 問題(Question): char *s1, *s2, *s3; s1 = "Abian is son of the bitch."; s2 = "Fuck you Abian."; s3 = strcat (s1, s2); printf(" %s \n %s \n %s\n", s1 , s2 , s3 ); 預期的正確結果(Expected Output): 就是可以印出想要的:Abian is son of the bitch.Fuck you Abian. 錯誤結果(Wrong Output): 程式無法執行。 補充說明(Supplement): 我字串處理比較薄弱,我想用指標指向字串,可是compiler之後就執行不成功。 是怎樣的問題,我用陣列是沒問題的說。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 5.23.4.124 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1434722784.A.52B.html
uranusjr: 置底十誡之四 06/19 22:07
apologize: 謝謝,字串不能用指標去更改,只能用陣列 06/19 22:10
Sirctal: 天阿 這樣很危險阿... 字串不能這樣搞 06/19 22:28
MOONRAKER: google一下 很容易可以看到strcat()的範例程式 06/20 11:42
johnhmj: 接字,你要給他緩衝空間來接 06/20 11:44
yvb: 原程式非緩衝空間問題,而是字串常數所在處,可能是唯讀不可寫. 06/20 16:45
johnhmj: 樓上抓我語病,就是要用字元陣列嘛,難道要我親自回文喔 06/20 17:12
johnhmj: ? 06/20 17:13
yvb: 樓上請試試看宣告個 global variable ... 06/20 17:25
yvb: const char s[100] = "Abian is son of the bitch."; 06/20 17:25
yvb: 然後 s1 = s; 後, 做 strcat(s1, s2) 看會如何? 06/20 17:26
yvb: 那個字串大概只有20來個字元長度, s[100]算不算有緩衝空間? 06/20 17:28
yvb: 而 const char s[100] 是不是字元陣列? 06/20 17:29
EdisonX: strcat(char * , const char *) compiler warning ? 06/20 17:31
johnhmj: 我不想牽拖到4樓,但他都說了strcat用法,你還要我再說偛 06/20 17:31
johnhmj: 我不想牽拖到4樓,但他都說了strcat用法,你還要我再說啥 06/20 17:31
yvb: 範例通常只教你怎麼做, 不會教你不能怎麼做... 06/20 17:51
yvb: 有 compile warning 不一定會 runtime error, 06/20 17:52
yvb: 而且 s1="..."; s2="..."; strcat(s1,s2);可能不會 warning. 06/20 17:53
yvb: 會出warning應該是s1=s; 若s設為local variable,應該不會RE. 06/20 17:54
johnhmj: 假如你認為可以正確解答就直接回文,給原PO看不是給我看 06/20 18:12
yvb: 一樓指出誡四,內容就是說"唯讀",二樓原PO回復其實就結案了... 06/20 22:17
yvb: 三樓以下,其實都算在哈拉了吧? XD 06/20 22:18
MOONRAKER: YOU ARE SAYING WHAT 06/21 00:33
yvb: UPSTAIRS, YOU ASK WHO 06/21 01:12
johnhmj: 你這唯讀說法好幾年就有人解釋過了,所以你想說什麼? 06/21 06:28
yvb: 若您同意唯讀說法,又提出緩衝空間的說法,那更不知你想做什麼? 06/21 14:06
Killercat: 不要偷渡得那麼故意 = = 另外,這篇說真的最糟的地方 06/21 16:05
TobyH4cker: YOU GOOD MOTHER 06/21 16:06
Killercat: 在於你錯誤訊息沒有印出來,這才是最關鍵的地方 06/21 16:06
johnhmj: yvb 你不尊重我的回答,我為何要尊重你的回應? 06/21 16:41
yvb: john 我只就事論事,認為緩衝空間說法混淆正解,無關尊不尊重. 06/21 17:07
bigpigbigpig: C 字串程式一定先開char陣列儲存字串,否則極不安全 06/21 17:07
yvb: 另外, 沒注意字串內容. K大 一說才知道, Abian無故中槍 XD 06/21 17:09
Killercat: 拍寫,我沒看推文就推了 讓大家誤會了(bow 06/21 17:43
yvb: 總結一下我在前20樓所提: http://ideone.com/Qarfhm (OK) 06/21 17:56
johnhmj: yvb 你連基本尊重他人推文都做不到憑什麼談正解或專業。 06/21 19:08
yvb: john 不知你誤解了什麼, 而有我不尊重你推文之說? 06/21 21:05
yvb: 是對推文有疑問, 也不能提出個人見解, 才是尊重推文? 06/21 21:05
yvb: 還是要加一堆敬語, 或稱呼大大之類的, 才是尊重推文? 06/21 21:06
yvb: 若是我誤用輕蔑的語句回應你的推文,也煩請指正是哪句. 06/21 21:07
johnhmj: 我在7樓寫得很清楚,難道你沒有看到? 06/21 22:15
johnhmj: 假如你當時一次否定掉1到5樓的推文意見那麼我無話可說。 06/21 22:23
loveme00835: 我不知道 yvb 在幹嘛.. 推文本來就是可以討論的地方 06/21 22:39
loveme00835: 也不是你覺得是沒回答到問題的地方就不能討論 06/21 22:39
loveme00835: 以我的觀點 4F 說的也是一個解法 06/21 22:43
yvb: 版大您誤會了. 我並未否定後續的討論,也未說不能討論. 06/21 23:31
yvb: 我就是試圖討論說清楚(即使樓早歪很多了:P),而非拒絕溝通... 06/21 23:31
yvb: 另外,原PO補充說明已知如何沒問題,故4F所提我覺得不是徵結點. 06/21 23:32
yvb: 至於john, 您在7F所述,認為是挑語病,我後續就是在說明這件事, 06/21 23:35
yvb: 既非緩衝空間,也非是否為字元陣列的問題,而是 "是否唯讀". 06/21 23:36
yvb: 不知您是否看了我前面 "總結一下" 的三個 URLs ? 06/21 23:36
yvb: 看了也許就知,我前20樓的推文在說什麼,為何不認為是挑語病了. 06/21 23:38
johnhmj: 給 yvb 每個人都跟你一樣回答了自認為合適的答案,當你一 06/22 02:01
johnhmj: 旦主觀否定某一位人士的推文,就會造成當事人觀感不佳… 06/22 02:01
johnhmj: 也就是心裡不爽。在此祝 yvb大師 有個美好夜晚。 06/22 02:01
johnhmj: 在此,祝 loveme版主大師 與 其他大大 有個美好夜晚。 06/22 02:04
yvb: 版大是大師無誤. 但我離大師還很遠, 擔當不起, 別折騰我了 :P 06/22 18:35
yvb: 至於您說的推文問題, 我不知其它人會怎麼回應這樣的情況: 06/22 18:36
yvb: 就以本文來說, 已有人提出置底第四誡, 若你也同意此見解... 06/22 18:36
yvb: 但之後, 又有人說 "置底第二誡", 甚至說 "置底第三誡", 06/22 18:37
yvb: 那麼後來的這兩個說法, 都合理嗎? 或該不該做什麼辨正呢? 06/22 18:37
soso7885: 題外話,編譯記得開-Wall 06/24 09:43
※ 編輯: apologize (221.154.189.189), 06/17/2016 19:29:07