我的普通 C 有点生疏,我目前正在尝试弄清楚为什么第一个有效而第二个无效。
char *returnSomething(void) {
char *s = (char *) malloc(5 + 1);
strcpy(s, "Hello");
return s;
}
void dontReturnSomething(char *dest) {
char *s = (char *) malloc (5 + 1);
strcpy(s, "Hello");
dest = malloc(strlen(s) + 1);
strcpy(dest, s);
free(s);
}
int main(int argc, char *argv[]) {
char *first = returnSomething();
char *second = NULL;
dontReturnSomething(second);
printf("first: %s | second: %s", first, second);
}
这不基本上是在做同样的事情吗?
最佳答案
要通过参数返回指针,您需要一个指向指针的指针。将 dest
声明为 char **dest
。
void dontReturnSomething(char **dest) {
char *str = "Hello";
*dest = malloc(strlen(str) + 1);
strcpy(*dest, str);
}
像这样调用函数:
dontReturnSomething(&second); // pass in address of second
关于c - 带有目标指针和返回值的 strcpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23256288/