2

以下程序不输出所需数据(在 VC2008 编译器上)

#include <stdio.h>
#include <string.h>

int main(void)
{
    int i;
    int dest[10] = {1};
    int src [] = {2, 3, 4, 5, 6};

    memcpy(dest, src, 5);
    for (i=0; i<10; i++) printf("%i\n", dest[i]);

    return 0;
}

而使用char数组代替,一切都很好!这里的问题在哪里?

4

6 回答 6

12

memcpy 需要多个字节来复制 - 而不是多个对象。

 memcpy(dest,src,5*sizeof(dest[0]))
于 2010-09-16T19:14:18.363 回答
3

memcpy仅复制字节。您需要通过将对象数乘以每个对象的大小来告诉它要复制多少字节,如下所示:

memcpy(dest, src, 5 * sizeof(int));
于 2010-09-16T19:15:15.457 回答
1

尝试memcpy(dest,scr,sizeof(int)*5)

于 2010-09-16T19:14:59.587 回答
1

您需要添加sizeof(int)

#include <stdio.h>
#include <string.h>

int main(void)
{
    int i;
    int dest[10] = {1};
    int src [] = {2, 3, 4, 5, 6};

    memcpy(dest, src, sizeof(int) * 5);
    for (i=0; i<10; i++) printf("%i\n", dest[i]);

    return 0;
}
于 2010-09-16T19:15:19.187 回答
1

你想用sizeof( x )“x”代表对象来调用 memcpy。在这里你会做

memcpy( dest, src, 5*sizeof(int) );
于 2010-09-16T19:15:35.223 回答
0

更好的是

memcpy( dest, src, 5*sizeof*src) );

如果将数组类型更改为其他类型,则不得更改代码。

于 2010-09-16T20:41:17.407 回答