[問題] char指標的問題

看板C_and_CPP作者 (怎麼開始怎麼辦)時間14年前 (2012/01/05 15:13), 編輯推噓7(7018)
留言25則, 7人參與, 最新討論串1/1
最近去面試考的一個問題 這個函式的目的是要把一個字串複製到另一個字串 compile會過但是執行就會出錯 我想應該是char指標的問題 但是不知道錯在哪裡以及要怎麼改 有人能解釋一下觀念嗎? 非常感謝! 程式碼如下 char *DupStr(char *source){ char *Des; int n; for(n = 1; n < strlen(source); n++) Des[n] = source[n]; return Des; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.235.7

01/05 15:22, , 1F
char * Des = calloc((strlen(source)+1)*sizeof(char);
01/05 15:22, 1F

01/05 15:24, , 2F
打錯...用malloc才是一個參數的OTL
01/05 15:24, 2F

01/05 15:26, , 3F
char * Des = calloc((strlen(source)+1),sizeof(char);
01/05 15:26, 3F

01/05 15:26, , 4F
char * Des =calloc((strlen(source)+1),sizeof(char));
01/05 15:26, 4F

01/05 15:29, , 5F
還有,最後少了一個\0
01/05 15:29, 5F

01/05 15:34, , 6F
上面這三行有什麼不一樣@@ 我試了還是不對耶...
01/05 15:34, 6F

01/05 15:34, , 7F
前兩個打錯了XD
01/05 15:34, 7F

01/05 15:47, , 8F
為 des 你沒分配空間給他,所以 des = source 這邊會錯
01/05 15:47, 8F

01/05 15:48, , 9F
正確的寫法應該是des = malloc(sizeof(strlen(source));
01/05 15:48, 9F

01/05 15:49, , 10F
memcpy(des, source, sizeof(strlen(source)));
01/05 15:49, 10F

01/05 15:51, , 11F
@aagogo: "+1"
01/05 15:51, 11F

01/05 15:53, , 12F
忘了 size要+1 copy的時候要把最後一個字元\0也co過去
01/05 15:53, 12F

01/05 16:40, , 13F
sizeof(strlen(source)) ? 不懂為什麼會對Orz.
01/05 16:40, 13F

01/05 16:40, , 14F
問題是 Des 沒有配置空間, n 也不應該從 1 開始數
01/05 16:40, 14F

01/05 17:12, , 15F
for( n = 0; n <= strlen( source ); n++ )應該會對?
01/05 17:12, 15F

01/05 17:53, , 16F
哈 memcpy那個寫錯了 memcpy(des,src,strlen(src)+1)才對
01/05 17:53, 16F

01/05 17:54, , 17F
一時沒注意~ 抱歉抱歉
01/05 17:54, 17F

01/05 17:59, , 18F
原來第一個也錯了 都不要加sizeof才對~ /_\
01/05 17:59, 18F

01/05 18:03, , 19F
忘了sizeof是抓型別所佔的byte數~
01/05 18:03, 19F

01/05 18:12, , 20F
char *Des = malloc((strlen(src)+1)*sizeof(char));
01/05 18:12, 20F

01/05 18:13, , 21F
上面這行compile有錯耶 真奇怪
01/05 18:13, 21F

01/05 18:13, , 22F
顯示 invalid conversion from `void*' to `char*'
01/05 18:13, 22F

01/05 18:19, , 23F
char *Des=(char*)malloc((strlen(src)+1)*sizeof(char))
01/05 18:19, 23F

01/05 18:26, , 24F
樓上那樣寫就對了 可是為什麼一定要轉換型態啊??
01/05 18:26, 24F

01/05 18:30, , 25F
C 應該不用會自己轉, C++ 對於型別安全要求比較高
01/05 18:30, 25F
文章代碼(AID): #1F1KsHV5 (C_and_CPP)