首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strcpy与memcpy

strcpy与memcpy
EN

Stack Overflow用户
提问于 2010-05-25 00:09:11
回答 9查看 106.5K关注 0票数 87

memcpy()strcpy()有什么区别?我试着在一个程序的帮助下找到它,但两者都给出了相同的输出。

代码语言:javascript
复制
int main()
{
    char s[5]={'s','a','\0','c','h'};
    char p[5];
    char t[5];
    strcpy(p,s);
    memcpy(t,s,5);
    printf("sachin p is [%s], t is [%s]",p,t);
    return 0;
}

输出

代码语言:javascript
复制
sachin p is [sa], t is [sa]
EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-05-25 06:14:36

如何才能看到这种效果

编译并运行以下代码:

代码语言:javascript
复制
void dump5(char *str);

int main()
{
    char s[5]={'s','a','\0','c','h'};

    char membuff[5]; 
    char strbuff[5];
    memset(membuff, 0, 5); // init both buffers to nulls
    memset(strbuff, 0, 5);

    strcpy(strbuff,s);
    memcpy(membuff,s,5);

    dump5(membuff); // show what happened
    dump5(strbuff);

    return 0;
}

void dump5(char *str)
{
    char *p = str;
    for (int n = 0; n < 5; ++n)
    {
        printf("%2.2x ", *p);
        ++p;
    }

    printf("\t");

    p = str;
    for (int n = 0; n < 5; ++n)
    {
        printf("%c", *p ? *p : ' ');
        ++p;
    }

    printf("\n", str);
}

它将生成以下输出:

代码语言:javascript
复制
73 61 00 63 68  sa ch
73 61 00 00 00  sa

您可以看到"ch“是由memcpy()复制的,但不是strcpy()复制的。

票数 131
EN

Stack Overflow用户

发布于 2010-05-25 00:11:28

当遇到NUL ('\0')字符时,strcpy会停止,而memcpy不会。您在这里看不到效果,因为printf中的%s也在NUL处停止。

票数 96
EN

Stack Overflow用户

发布于 2010-05-25 00:12:43

当找到源字符串的空终止符时,strcpy将终止。memcpy需要传递size参数。在您给出的例子中,在为两个字符数组找到空终止符之后,printf语句会暂停,但是您会发现t[3]t[4]也在其中复制了数据。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2898364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档