Re: [問題] point++
※ 引述《pinkkate (笑笑貓~)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: gcc
: 問題(Question):
: 這是某間公司的考題
: char *test = "ABCDE";
: *test++;
: printf("%s\n", test);
: test++;
: printf("%s\n", test);
: 問輸出結果
: --------------------------
: 當時我寫:
: BCDE
: CDE
: --------------------------
: 後來面試的主管跟我說,第一個是*test++
: 所以應該是字串內容+1 所以答案是BBCDE
: 第二個才是test++
: 因此答案是 BCDE
: 當時我接受這種說法,但回家後,實際寫程式來run
: 發現不對,答案印出來跟我寫的一樣
: 想問
: 1.是否編譯器把*test++解讀為test++
: 2.中間哪裡出了問題?哪個答案才是對的?
假設主管要表達的是 (*test)++ 的話
印象中standard好像有看到這個問題
C++ standard 2.14.5 String literals 有提到
Whether all string literals are distinct (that is, are stored in non
overlapping objects) is implementation defined.
The effect of attempting to modify a string literal is undefined.
另外根據不曉得從哪讀來的模糊印象,實務上compiler會把string literal存在程式中唯
讀的記憶體,所以真的去改會出現segmentation fault。
結論:主管的考題牽涉到C++中明確指出的undefined behavior,所以發生任何事都有可
能,而實務上會出現segmentation fault。
個人學淺,說錯還請諸位版大指正了,謝謝。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.136.119.208
→
12/18 19:42, , 1F
12/18 19:42, 1F
稍微修改一下內文,原文主管應該是想要 (*test)++
※ 編輯: d8888 來自: 220.136.119.208 (12/18 20:01)
推
12/19 07:20, , 2F
12/19 07:20, 2F
→
12/19 10:47, , 3F
12/19 10:47, 3F
→
12/19 10:49, , 4F
12/19 10:49, 4F
→
12/19 10:50, , 5F
12/19 10:50, 5F
→
12/19 10:51, , 6F
12/19 10:51, 6F
推
12/19 14:46, , 7F
12/19 14:46, 7F
討論串 (同標題文章)