strcpy和memcpy之间的重叠

时间:2016-11-07 16:17:48

标签: c

char pt[116];

pt是一条消息,其中包含由"分隔的3个部分:"最后一部分是随机值

我已将每个值存储在指针

char* x = strtok( pt, ":" ) ;
char* y = strtok( NULL, ":" ) ;
char* z = strtok( NULL, ":" ) ;

printf("x:%s \n",x);
printf("y:%s \n",y);
printf("z:%s \n",z);

以后我需要第一部分的一些字符

 memcpy(x,strcat(x,".pem"),strlen(x)+4) ); //==>this line cause the problem coz 
 x[strlen(x)]='\0';
 printf("%s\n",x);
 memcpy(y,y,strlen(y)+strlen(x)+4);
 printf("y is :%s\n",y); // here the output is wrong it prints the pem the  added part to x

那么,有什么建议将.pem添加到x而不与memcyp重叠?

1 个答案:

答案 0 :(得分:1)

  

<强>的strtok

     

此函数返回指向字符串中找到的最后一个标记的指针。如果没有要检索的标记,则返回空指针。

当您使用strcat广告.pem到字符串的第一部分(x)时,您将覆盖y部分。

您应该将每个字符串隔离在不同的数组(c-string)中并更改而不是原始字符串。

// Create a new container for x. Note: +1 is for the c-string null terminator
x_new[strlen(x)+4+1];

strcpy(x_new, x);
strcat(x_new, ".pem");