[問題] 字元陣列賦值的合法性

看板C_and_CPP (C/C++)作者 (心思活一點)時間14年前 (2012/02/26 11:52), 編輯推噓2(2015)
留言17則, 10人參與, 最新討論串1/1
前幾天面試 碰到下面兩個問題 不知道問題出在哪 請大家指教一下 1. 下列副程式 哪裡不恰當? void func1() { char dst[10]; char* src = "abcde12345"; strcpy( dst, src); } 2. 一樣,哪裡不恰當? void func2() { char dst[8], src[8]; int i; for ( i = 0 ; i < 7 ; i++) { src[i] = 'a'; } strcpy(dst, src); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.57.127.28 ※ 編輯: NetsFan 來自: 61.57.127.28 (02/26 11:52) ※ 編輯: NetsFan 來自: 61.57.127.28 (02/26 11:54)

02/26 11:59, , 1F
太長了,沒弄乾淨
02/26 11:59, 1F

02/26 12:26, , 2F
strcpy是處理"字串"的,字串的最後面一定有'\0'字元
02/26 12:26, 2F

02/26 12:27, , 3F
所以func1的src長度有11要複製到長度為10的dst會有問題
02/26 12:27, 3F

02/26 12:28, , 4F
func2的src沒有設定結尾字元'\0',strcpy會有問題
02/26 12:28, 4F

02/26 12:29, , 5F
你對字串處理相當不熟....
02/26 12:29, 5F

02/26 12:30, , 6F
另外這些副程式是白作工...
02/26 12:30, 6F

02/26 12:50, , 7F
副程式只有單純strcpy到一個區域變數,應該會有處理吧
02/26 12:50, 7F

02/26 13:54, , 8F
白工+1...
02/26 13:54, 8F

02/26 18:33, , 9F
哈 這個題目是我從面試那邊記下來的 是白工沒錯
02/26 18:33, 9F

02/26 18:33, , 10F
可能答案是 做白工 也是選項之一?
02/26 18:33, 10F

02/26 19:08, , 11F
這不知道會不會被opt
02/26 19:08, 11F

02/26 19:38, , 12F
為何是白工?
02/26 19:38, 12F

02/26 19:45, , 13F
因為操作的src與dst兩個陣列都是區域變數。
02/26 19:45, 13F

02/26 19:47, , 14F
不過我想主要考的應該是指沒有考慮到字串結尾的'\0'字元
02/26 19:47, 14F

02/26 22:20, , 15F
了解 thx
02/26 22:20, 15F

02/26 22:56, , 16F
我覺得你無法對這個問題下好的標題也是一個問題
02/26 22:56, 16F

02/26 23:33, , 17F
板主xdd
02/26 23:33, 17F
文章代碼(AID): #1FIQo9PU (C_and_CPP)
文章代碼(AID): #1FIQo9PU (C_and_CPP)