附加到字符串作为输入参数
Appending to string as input argument
我在 C 例程中生成字符串时遇到问题。
目标
- 让函数生成自定义字符串和 return 值
- 例如'void getName( char ** name )'
尝试
int main(void) {
char *name;
getName(&name);
}
void getName(char **name) {
*name = "#"; // Load with prefix
//?strcpy(*name[1], "123"); // Goal: "#123"
}
如何让 getName()
生成 #123
,如此处所示?
第一个问题:使用malloc
分配内存。
char *name = malloc(sizeof("#123")+1);
即使你在分配内存后运行它,它也会给出运行时间错误;正如你所做的那样:
*name = "#";
问题是您首先为 5 个字符分配了 space,并将您的指针指向该内存的开头。然后在第二行将指针指向导致内存泄漏的字符串文字。
指针不再指向分配的内存。
你会喜欢这样做:
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");
}
我在 C 例程中生成字符串时遇到问题。
目标
- 让函数生成自定义字符串和 return 值
- 例如'void getName( char ** name )'
尝试
int main(void) {
char *name;
getName(&name);
}
void getName(char **name) {
*name = "#"; // Load with prefix
//?strcpy(*name[1], "123"); // Goal: "#123"
}
如何让 getName()
生成 #123
,如此处所示?
第一个问题:使用malloc
分配内存。
char *name = malloc(sizeof("#123")+1);
即使你在分配内存后运行它,它也会给出运行时间错误;正如你所做的那样:
*name = "#";
问题是您首先为 5 个字符分配了 space,并将您的指针指向该内存的开头。然后在第二行将指针指向导致内存泄漏的字符串文字。
指针不再指向分配的内存。
你会喜欢这样做:
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");
}