我有两个字符串,str1和str2。我想在堆上将它们以空格为连接符进行拼接。我使用以下方法为它们分配空间:
char *concat = (char*) malloc(strlen(str1) + strlen(str2) + 1);
我能只做这个吗:
strcat(concat, str1);
strcat(concat, str2);
那么concat会给我一个将两个字符串连接在一起的堆上位置吗?我问这个问题是因为似乎strcat实际上会将str1添加到使用malloc分配的空间的末尾。这是正确的吗?因此,str1将出现在位置strlen(str1)+ strlen(str2)+1。
我问这个问题的原因是我正在使用上述方法,但在valgrind中遇到错误: 条件跳转或移动取决于未初始化的值
memmove()
而不是memcpy()
,因为虽然在这种情况下memcpy()
是安全的,但它并不总是安全的,而memmove()
总是安全的。 - Jonathan Lefflermemmove
,会让人感到困惑。任何使用memmove
应该用于说明你正在做一些非常不同和不寻常的事情。如果我看到在这里使用memmove
,我会花一两分钟试图弄清楚为什么有人使用它,并且是否有什么可疑的东西正在发生... - R.. GitHub STOP HELPING ICE