我在C例程中生成字符串时遇到问题。
目标
尝试
int main(void) {
char *name;
getName(&name);
}
void getName(char **name) {
*name = "#"; // Load with prefix
//?strcpy(*name[1], "123"); // Goal: "#123"
}
如何getName()
生成#123
,如此处所示?
答案 0 :(得分:2)
第一个问题:使用malloc
分配内存。
char *name = malloc(sizeof("#123")+1);
即使您在分配内存后运行它,也会产生运行时错误;正如你所做的那样:
*name = "#";
问题首先是为5个字符分配空间并将指针指向该内存的开头。然后在第二行中,将指针指向一个字符串文字,导致内存泄漏。
指针不再指向已分配的内存。
你想这样做:
int main(void) {
char *name = malloc(sizeof("#123")+1);
getName(&name);
printf("%s", name);
free(name);
name = NULL;
}
void getName(char **name) {
strcpy((*name), "#");
strcat(*name,"123");
}