在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所说,您的示例代码泄漏了第一个内存分配.你不再使用它了,你不再有指针,所以你不能释放它.这是不好的.