我想用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