[爆卦]字 串 賦值是什麼?優點缺點精華區懶人包

為什麼這篇字 串 賦值鄉民發文收入到精華區:因為在字 串 賦值這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者kdok123 (小天)看板C_and_CPP標題[問題] 字串賦值問題時間Sun Oct 19...

字 串 賦值 在 好日曆 Instagram 的最佳解答

2021-09-03 11:56:57

我們每個人都活在屬於自己的時區,用自己的節奏,寫自己的故事,就是生命最好的安排 - 前幾天在和一位朋友隨意地聊著天 聊著聊著,不知怎麼地就成了心靈輔導時間 她和我說,雖然已經工作一陣子了 但還總是覺得自己成長太過緩慢 有很多東西都還不會、也常自責思慮不周 覺得自己跟別的厲害的同事朋友差很多 為此...


ex1:
char str[6] = "hello";
*str = 'x';
// 編譯通過

ex2:
char *str = "hello";
*str = 'x';
//編譯失敗

想請問是為什麼呢?

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.25.105
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1413732792.A.055.html
LPH66: 置底十三誡之四 10/19 23:41
jammy50605: ex1的str是陣列第一個元素的位址 會變成xello 10/20 00:06
jammy50605: ex2的str是字元指標 字元指標重新指定字串要 str='x' 10/20 00:07
jammy50605: 字串會整個被改成x 而且應該要用雙引號代表字串"x" 10/20 00:11
loveflames: 第二個指向唯讀區,就算能編譯也不能執行 10/20 00:31
uranusjr: 不過原來這樣會 error 啊, 我一直以為會通過然後 crash 10/20 00:53
johnpage: 死背 10/20 00:58
LPH66: 連這都要死背的話還是別寫程式吧 (望) 另外四樓後半不對 10/20 22:04
LPH66: 它想做的跟 ex1 是一樣的, 兩者差別就只是五樓說的這樣而已 10/20 22:04
jammy50605: 如果要跟ex1一樣只改字串中的單一字元是辦不到的 10/21 00:37
jammy50605: 因為你的str是字元指標會指到一個字串 10/21 00:37
jammy50605: 他並沒有像字元陣列有偏移的概念 所以不能拿str改字元 10/21 00:38
jammy50605: 所以*str跟*str[0]是一樣意思 都是不行的~ 10/21 00:45
LPH66: 唔嗯, C 語言的字串就只是個尾巴有個 '\0' 的字元陣列而已 10/21 00:58
LPH66: 所以 ex2 之所以做不到的原因完全是因為唯讀 10/21 00:59
jammy50605: 喔喔 LPH66大大說的才是對的 系統會找個位址放字串常 10/21 01:41
jammy50605: 數 然後把位址回傳給str 但這個位址系統不給用(唯獨) 10/21 01:42
loveflames: 字元指標一樣有偏移的概念,a[b]等同*(a+b)等同b[a] 10/21 01:44
jammy50605: 只能重新讓系統找新的位址放字串常數 回傳字串常數的 10/21 01:44
jammy50605: 位址這樣 受教了~~ 10/21 01:44
loveflames: 所以*str等同str[0]跟0[str] 10/21 01:46
loveflames: 第二個是因為str指向唯讀區,*str相當於修改唯讀區 10/21 01:50
kdok123: 原來如此! 感謝各位解答! 10/22 10:58

你可能也想看看

搜尋相關網站