c - 带有目标指针和返回值的 strcpy

标签 c

我的普通 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/

相关文章:

c - 接收到结构数组

c - fseek 不适用于空文件

c - 何时在 C 中使用普通 char 类型

c - fprintf C 多个空格

c - 如何充分利用堆栈跟踪(来自内核或核心转储)?

C 写入文件的可重复选择问题

c - 在 C 中使用可变文件名从具有相似名称的多个文件中读取?

c - C 中文件 I/O 的一些最佳实践是什么?

c - C 结构和 int 变量的问题

c - 如何从二叉树中删除节点?