#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。
我理解第一部分,因为它指向[3]并从那时起计算为空字符,这只是&#39; de&#39;
输出结果为:
德
devwxyz
基本上,我不知道如何找到&#34; s + 2&#34;而且我不确定为什么会这样做呢?&#39; de&#39;在最终输出的开头。 &#39; devwxyz&#39;
希望有人可以提供帮助,谢谢你们。
编辑:
我试图用这段代码搞清楚,看起来索引对我来说不起作用..
#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]将达到字母&#39; b&#39;不是abvwxyz吗?但是正确的结果是avwxyz。
答案 0 :(得分:3)
您的代码有两次调用strcpy()
。第一个副本就像你描述的那样复制“de”。
第二个将“vwxyz”复制到s
(s + 2
)中第三个字符的地址。由于s
只有两个字符长,因此它有效地将“vwxyz”附加到“de”。
答案 1 :(得分:0)
你发现s + 2与你发现+ 3的方式相同。在这种情况下,s的第三个字符是第一次复制的\ 0(并被此strcpy替换)。