Re: [問題] point++

看板C_and_CPP作者 (Don)時間12年前 (2013/12/18 19:15), 編輯推噓2(205)
留言7則, 4人參與, 最新討論串2/2 (看更多)
※ 引述《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
覺得只是單純operator優先權的問題
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
還有string literal修改為undefined behavior
12/19 10:51, 6F

12/19 14:46, , 7F
考operator優先順序實在很無聊,看考題就知道眼界
12/19 14:46, 7F
文章代碼(AID): #1IiOF5TF (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
問題
18
28
完整討論串 (本文為第 2 之 2 篇):
問題
2
7
問題
18
28
文章代碼(AID): #1IiOF5TF (C_and_CPP)