標籤:
今天在看前輩的代碼,對其中字串複製有時候直接把指標賦給另一個指標,有的malloc一個記憶體,然後把整個字串的值拷貝過來,有點費解,就研究了一下,會了之後發現也沒什麼奧秘,其實很簡單,不過還是記錄一下比較好。 先寫結論:如果要拷貝的源字串的記憶體會被回收,那麼就必須malloc一個記憶體再拷貝整個字串(有時候malloc是防止修改源字串,不過不考慮這個因素),如果不會被回收則不用。 下面是測試代碼
#include <stdio.h>
#include <string.h>
typedef void(*str_cpy_slk)(char *name);
void test(str_cpy_slk cb);
void call_back(char *name);
char *test_name = NULL;
int main(void)
{
test(call_back);
printf("name:%s\n", test_name);
return 0;
}
void test(str_cpy_slk cb)
{
char myname[8] = {0};
snprintf(myname, sizeof(myname), "%s", "slk");
printf("myname:%s\n", myname);
cb(myname);
}
void call_back(char *name)
{
test_name = name;
printf("test_name:%s\n", test_name);
}
已不可顯示。用malloc開闢記憶體,再賦值的話,則可以
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef void(*str_cpy_slk)(char *name);
void test(str_cpy_slk cb);
void call_back(char *name);
char *test_name = NULL;
int main(void)
{
test(call_back);
printf("name:%s\n", test_name);
free(test_name);
return 0;
}
void test(str_cpy_slk cb)
{
char myname[8] = {0};
snprintf(myname, sizeof(myname), "%s", "slk");
printf("myname:%s\n", myname);
cb(myname);
}
void call_back(char *name)
{
test_name = (char *)malloc(strlen(name) + 1);
snprintf(test_name, strlen(name) + 1, "%s", name);
printf("test_name:%s\n", test_name);
}
C語言 複製字串 malloc