Memcpy复制的数量超过预期

Memcpy复制的数量超过预期,c,memcpy,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

我正试图复制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);
size\u t symlen=tmpP-cp;
char*triP=malloc(symlen);
printf(“位置不正确的%zu\n”,symlen);
memcpy(triP,tmpP-(symlen),symlen);

printf(">>VAL%s这是因为您没有将空字节添加到memcpy的数据中。看起来memcpy一定已将复制字符串的页面标记为写入时复制,因此当访问
triP
时,实际上是在访问
tmpP
,因此第二个
printf
中显示的
triP
的值是
tmpP
而不是乱七八糟的数据。

这是因为您没有将空字节添加到memcpy的数据中。看起来memcpy一定已经将复制字符串的页面标记为写入时复制,因此当访问
triP
时,实际上是在访问
tmpP
,因此第二个
p中显示了
triP
的值rintf
tmpP
而不是乱七八糟的数据。

您应该再分配一个字节,并在其中写入一个空字符以标记字符串的结尾

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);
size\u t symlen=tmpP-cp;
char*triP=malloc(符号+1);
printf(“位置不正确的%zu\n”,symlen);
memcpy(triP,tmpP-(symlen),symlen);
tripP[symlen]='\0';

printf(“>>VAL%s您应该再分配一个字节,并在其中写入一个空字符以标记字符串的结尾

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);
size\u t symlen=tmpP-cp;
char*triP=malloc(符号+1);
printf(“位置不正确的%zu\n”,symlen);
memcpy(triP,tmpP-(symlen),symlen);
tripP[symlen]='\0';

printf(“>>VAL%sDoes
symlen
说明
printf
所需的尾随
\0
字符吗?是否有尾随
\0
?打印为
%s
假定这是以零结尾的字符串。如果这是您编写的全部内容,您忘记(手动!)添加终止零。tmpP、cp的类型是什么?memcpy使用dst和src指针以及要复制的字节数,您发送给memcpy的第二个参数是什么?可能是您正在读取垃圾数据。我没有显示tmpP或cp,因为查找错误不需要它。是否
symlen
或者
printf
所需的尾随
\0
字符?是否有尾随
\0
?作为
%s
打印假定这是以零结尾的字符串。如果这是您编写的全部内容,则您忘记(手动!)添加终止零。tmpP的类型是什么,cp???memcpy接受dst和src指针以及要复制的字节数,您发送给memcpy的第二个参数是什么?可能是您正在读取垃圾数据。我没有显示tmpP或cp,因为查找错误不需要它。