[討論] 程式設計師面試寶典的面試題目

看板Soft_Job (軟體人)作者 ( 返無)時間14年前 (2011/12/09 14:33), 編輯推噓7(7010)
留言17則, 8人參與, 最新討論串1/1
裡頭提到很多公司考的題目, 我認為拿來當題庫練習還不錯, 全部搞懂的話應該可以應付大多數公司的筆試。 討論其中一題: char *a(){ char ca[]="hello"; return ch; } 這樣有什麼問題。 大概就是: 放在 stack 裡, 在 return 時, stack 會被清掉, 所以無法預期 c[] 的值還會是 "hello"。 書中提出可用 char *c="hello"; 改善。 書中有解釋, 我覺得很有趣, 也翻了一下 The C Programming Language, 不過沒看到說明這一差異, 可能我沒找到。 想知道書上解釋的原因, 轉成組合語言就清楚多了。 由於程式碼較長, 分享在 blog 上。 http://descent-incoming.blogspot.com/2011/12/c-runtime-array-vs-pointer.html -- 死, 是生命最偉大的發明。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 115.43.245.118

12/09 18:57, , 1F
寫 char *c="hello" 一樣很危險
12/09 18:57, 1F
請問風險在於哪裡呢? 書中解法是傳回 const char* const char* a() { char *cp="hello"; return cp; } ※ 編輯: descent 來自: 115.43.245.118 (12/09 20:16)

12/09 20:35, , 2F
寫 char* 表示這塊資料可以被寫入,但寫了就炸了
12/09 20:35, 2F

12/09 20:35, , 3F
回傳 const char* 是對的
12/09 20:35, 3F

12/09 20:38, , 4F
每種C compiler實作的方式不太一樣
12/09 20:38, 4F

12/09 20:40, , 5F
static char[]會比較保險, 唯讀的就用static const char[]
12/09 20:40, 5F

12/09 20:54, , 6F
重點是static,const等關鍵字,而不是char*, char[]的差別
12/09 20:54, 6F

12/09 20:55, , 7F
在c/c++中,傳回local的reference是undefined的行為,不同編
12/09 20:55, 7F

12/09 20:56, , 8F
譯器可能有不同的行為.
12/09 20:56, 8F

12/09 22:17, , 9F
我知道你想說啥,不過 return ch, compile 能過??
12/09 22:17, 9F
打錯, 已經修正。 ※ 編輯: descent 來自: 115.43.245.118 (12/09 22:57)

12/09 23:20, , 10F
第一次看到指標指向常數的用法@@ 所以這邊的hello像
12/09 23:20, 10F

12/09 23:20, , 11F
new一樣是存在heap而非stack?
12/09 23:20, 11F

12/10 00:18, , 12F
這種題目很基本耶...(被考這種題目我會生氣吧 XD
12/10 00:18, 12F

12/10 00:24, , 13F
hello和其它literal一樣 通常放在read only data
12/10 00:24, 13F

12/10 01:42, , 14F
我只會覺得用string就好了弄個容易有bug的東西來找麻煩
12/10 01:42, 14F

12/10 09:13, , 15F
因為很多人覺得C++太慢啊 科科
12/10 09:13, 15F

12/12 07:36, , 16F
那甚麼語言算是快的= ="
12/12 07:36, 16F

12/13 20:59, , 17F
組合語言
12/13 20:59, 17F
文章代碼(AID): #1EuQkojl (Soft_Job)
文章代碼(AID): #1EuQkojl (Soft_Job)