#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{
char *a = "abcde";
char *b = "vwxyz";
char s[10];
strcpy(s,a+3);
printf("%s\n",s);
strcpy(s+2,b);
printf("%s\n",s);
return 0;
}
我有一個小問題,找出爲什麼第二個strcpy(s + 2,b)輸出devwxyz。Strcpy在C輸出
我瞭解第一部分,因爲它指向[3]並從此計算到僅爲'de'的空字符。
輸出是:
德
devwxyz
基本上,我不知道如何找到「S + 2」,我不知道爲什麼它是「德」在最終輸出的開始。 'devwxyz'
希望有人能幫助,謝謝你們。
編輯:
我試圖用這一段代碼來弄明白,似乎索引並沒有爲我工作..
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{
char *a = "abcde";
char *b = "vwxyz";
char s[10];
strcpy(s,a+0);
printf("%s\n",s);
strcpy(s+1,b);
printf("%s\n",s);
return 0;
}
希望有人能解釋,這是因爲第一的strcpy結果abcde。和s [1]這將取決於字母'b',所以它不是abvwxyz?但正確的結果是avwxyz。
閱讀指針算術。 's',在衰減到指針後,指向數組的元素'0'。 's + 2'指向數組的元素'2'。 –
's + 2'指向's [2]'。 – BLUEPIXY
*我不知道如何找到「s + 2」* - 你是說你不知道如何數到2? *我不確定爲什麼它在最終輸出開始時是'de'。* - 爲什麼不是?您將「de」複製到s中,並且以後不會更改它。 *希望有人可以幫助,謝謝你們。* - 很難弄清楚你不明白哪個明顯的事情。 –