C中的Strcpy输出

时间:2014-01-30 00:54:08

标签: c

    #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。

2 个答案:

答案 0 :(得分:3)

您的代码有两次调用strcpy()。第一个副本就像你描述的那样复制“de”。

第二个将“vwxyz”复制到ss + 2)中第三个字符的地址。由于s只有两个字符长,因此它有效地将“vwxyz”附加到“de”。

答案 1 :(得分:0)

你发现s + 2与你发现+ 3的方式相同。在这种情况下,s的第三个字符是第一次复制的\ 0(并被此strcpy替换)。