我需要編寫一個簡單的程序(沒有花哨的指針,沒有庫函數,用於教育目的),它從用戶讀取第一個和第二個名字並將它們打印出來由空格分隔的單行。我沒有得到的結果,我不知道爲什麼:在不使用庫函數的情況下在C中連接字符串
# include <stdio.h>
//the program loosely simulates the behaviour of strcpy
main(){
char fname[16], sname[16], cat[31];
int i, j;
printf("Please enter your first name: ");
scanf("%s", fname);
printf("Please enter your second name: ");
scanf("%s", sname);
for (i=0; fname[i] != '\0'; cat[i++] = fname[i++])
;
cat[i+1] = ' '; //adds a space between the tokens
for (j=i+1; sname[j] != '\0'; cat[j++] = sname[j++])
;
printf("The final result is:\n%s", cat);
return 0;
}
你'J = + 1',然後使用'SNAME [J ++ ]'---你正在訪問'sname'越界,加上一些UB(見下一篇文章)等等。至少,我在這裏發現了3個左右的錯誤。 – 2015-02-11 19:49:46
'貓[i ++] = fname [i ++]'可能不會達到您的預期。 'cat [i] = fname [i],i ++'更安全。 – 2015-02-11 19:50:14
@squeamishossifrage:或者他可以將賦值放在它所屬的for循環的(當前爲空)體中。 – 2015-02-11 19:52:16