我想使用 memcpy
将字符串复制到一个空指针(我复制到一个空指针的原因是在我的实际应用程序中我可以复制多种类型,所以我试图笼统地说),但是使用下面的示例代码我遇到了一个问题:
#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
时遇到了一个 Segmentation Fault。有谁知道为什么这不起作用?将 void 指针转换为 char
或 memcpy
时是否存在问题?但是,如果我将 memcpy
行更改为 memcpy(str2, &str1, strlen(str1)+1)
我可以在释放之前打印出 str2
str1
,但在释放 str1
之后 str2
也消失了。
我确实知道,如果我用 char*
而不是 void*
声明 str2
(并删除输出打印语句),但我想尽可能避免这种情况。
更新:我更改了示例代码以避免初始内存泄漏。
最佳答案
你的 Actor 是错误的。你不需要 *(char **)
,你只需要 (char *)
,甚至那也不是真正必要的。
此外,您的初始 malloc 只不过是内存泄漏,strdup
分配了自己的内存。
关于c - 使用 memcpy 从字符串复制到 void 指针的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21443198/