我想用memcpy
将一个字符串复制到一个空指针(我复制到一个空指针的原因是,在我的实际应用程序中,我可以复制品种的类型,所以我想是一般的),但使用的示例代码跌破该位我碰到一个问题:使用memcpy从字符串复制到void指针的问题
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(void){
char *str1 = strdup("Hello");
void *str2 = malloc(strlen(str1)+1);
fprintf(stdout, "str1 = %s\n", str1);
memcpy(str2, str1, strlen(str1)+1);
fprintf(stderr, "str2 = %s\n", *(char **)str2);
free(str1);
fprintf(stderr, "str2 = %s\n", *(char **)str2);
return 0;
}
在这个例子中,我得到尝试打印出str2
当段错误。有谁知道为什么这不起作用?将void指针指向char
或者memcpy
更基本的东西是否存在问题?但是,如果我将memcpy
行更改为memcpy(str2, &str1, strlen(str1)+1)
,我可以在释放str1
之前打印出str2
,但释放后也消失了。
我知道它会所有的工作,如果我宣布str2
与char*
,而不是void*
(并删除输出打印语句铸造),但我想避免,如果可能的。
更新:我更改了示例代码以避免初始内存泄漏。
您的剧组导演错误。你不想'*(char **)',你只需要'(char *)'。 – Kevin
另外,你的初始'malloc'只是内存泄漏,'strdup'分配它自己的内存。 – Kevin
@凯文可能想要把它放在答案中,因为它确实回答了他的问题。 – Avery3R