Memcpy复制的数量超过预期
我正试图复制x字节。计算尺寸并打印出来(见下文)。我使用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
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%sDoessymlen
说明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,因为查找错误不需要它。