Memcpy比预期复制更多

时间:2013-11-27 14:39:45

标签: c memcpy

我正在尝试复制x个字节。计算尺寸并打印出来(见下文)。我使用memcpy复制计算的字节数。但结果我有时会得到更长的价值观。有什么问题?

这是一些代码:

  size_t  symlen  = tmpP - cp;
  char * triP = malloc(symlen);
  printf("mallocated %zu\n", symlen) ;
  memcpy (triP, tmpP - (symlen) , symlen);
  printf(">>VAL %s<<\n", triP);

这是一些输出,您可以看到,该值的长度为15个字符。

mallocated 15
>>VAL 558657,1033,8144399,814<<
mallocated 15
>>VAL 558657,1033,8144399,814<<

2 个答案:

答案 0 :(得分:3)

你应该再分配一个字节,并在其中写一个空字符来标记字符串的结尾。

size_t  symlen  = tmpP - cp;
char * triP = malloc(symlen+1);
printf("mallocated %zu\n", symlen) ;
memcpy (triP, tmpP - (symlen) , symlen);
tripP[symlen] = '\0';
printf(">>VAL %s<<\n", triP);

答案 1 :(得分:2)

那是因为你没有在memcpy'd数据中添加空字节。看起来memcpy必须标记将字符串复制为copy-on-write的页面,因此当访问triP时,其中一个实际访问tmpP,因此访问triP的值第二个printf中显示的是tmpP,而不是乱码数据。