如何通过函数设置指针引用

Tho*_*mas 11 c

在C中,我试图通过将其发送到函数来设置指针的值,但该值不会在函数外部发生变化.这是我的代码:

#include <stdio.h>
void foo(char* str) {

    char* new_str = malloc(100);
    memset(new_str, 0, 100);
    strcpy(new_str, (char*)"new test");

    str = new_str;
}


int main (int argc, char *argv[]) {

    char* str = malloc(100);
    memset(str, 0, 100);

    strcpy(str, (char*)"test");

    foo(str);

    printf("str = %s\n", str);
}  
Run Code Online (Sandbox Code Playgroud)

我要打印出来:

str = new test 
Run Code Online (Sandbox Code Playgroud)

但是这段代码打印出来:

str = test
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.提前致谢.

Ste*_*sop 22

在C中没有传递引用.如果您在C中提供str函数的参数,则始终传递当前值str,而不是str自身.

你可以将str 的指针传递给函数:

void foo(char** pstr) {
    // ...
    *pstr = new_str;
}

int main() {
    // ...
    foo(&str);
}
Run Code Online (Sandbox Code Playgroud)

正如Eiko所说,您的示例代码泄漏了第一个内存分配.你不再使用它了,你不再有指针,所以你不能释放它.这是不好的.