以下程序不输出所需数据(在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
数组代替,每件事情都很好!
这里的问题在哪里?
答案 0 :(得分:12)
memcpy需要复制多个字节 - 而不是许多对象。
memcpy(dest,src,5*sizeof(dest[0]))
答案 1 :(得分:3)
memcpy
仅复制字节。您需要通过将对象数乘以每个对象的大小来告诉它要复制多少字节,如下所示:
memcpy(dest, src, 5 * sizeof(int));
答案 2 :(得分:1)
尝试memcpy(dest,scr,sizeof(int)*5)
答案 3 :(得分: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;
}
答案 4 :(得分:1)
您想使用sizeof( x )
调用memcpy,其中“x”代表对象。在这里你做
memcpy( dest, src, 5*sizeof(int) );
答案 5 :(得分:0)
更好的是
memcpy( dest, src, 5*sizeof*src) );
如果您将array-type更改为其他类型,则代码必须不更改。