[問題] 字串插入字串的問題

看板C_and_CPP (C/C++)作者 (PPP)時間16年前 (2009/05/07 12:06), 編輯推噓2(208)
留言10則, 5人參與, 最新討論串1/2 (看更多)
這是書上的練習題 將一個字串插入另一個字串的中央 我執行時插入的中間會跑出一些亂碼 紅色部分的程式碼 請問這邊是什麼問題呢? 是不是有什麼東西沒有考慮到 (看書自修好辛苦啊 QQ) #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char string1[10], string2[10], string3[10]; char dest_string[30]; int i, j, str1_length, str2_length; printf("輸入外部字串str1 => "); scanf("%s", &string1); printf("輸入內部字串str2 => "); scanf("%s", &string2); str1_length=strlen(string1); str2_length=strlen(string2); strncpy(dest_string, string1, str1_length/2); strcat(dest_string, string2); for(i=str1_length/2,j=0;;i++,j++) { string3[j]=string1[i]; if(string3[j]=='\0') break; } strcat(dest_string, string3); printf("合併字串(str2插入str1字串中央) => %s\n", dest_string); system("pause"); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.243.66

05/07 12:52, , 1F
被老師教才辛苦
05/07 12:52, 1F

05/07 13:35, , 2F
strncpy(dest_string, string1, strlen(string1));
05/07 13:35, 2F

05/07 14:02, , 3F
不好意思 上面的語法好像不是我要的耶
05/07 14:02, 3F

05/07 14:23, , 4F
你是輸入中文嗎?如果是的話因為中文是 multi-byte char
05/07 14:23, 4F

05/07 14:23, , 5F
也就是一個中文字需要多個位元來表示,所以單純將
05/07 14:23, 5F

05/07 14:23, , 6F
string1 切半 (str1_length/2) 是不行的
05/07 14:23, 6F

05/07 14:27, , 7F
我輸入是英文 good 還有 orz,結果變成 "go亂碼orzod"
05/07 14:27, 7F

05/07 14:28, , 8F
所以才想請問中間的亂碼是什麼造成的
05/07 14:28, 8F

05/07 14:40, , 9F
scanf那邊不需要加&吧
05/07 14:40, 9F

05/07 14:41, , 10F
scanf("%s",string1);
05/07 14:41, 10F
文章代碼(AID): #1A0bueRB (C_and_CPP)
文章代碼(AID): #1A0bueRB (C_and_CPP)