我试图通过将其地址传递给函数来更改字符串的值。 结果我得到了NULL。我尝试了strcpy,但它不适用于字符串上的指针。
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void changeStr (char ** tmpP){
char* test="Hello world !";
char** add=&test;
tmpP=add;
}
int main() {
char* tmp;
changeStr(&tmp);
printf("\n %s \n",tmp);
return 0;
}
结果:
(NULL)
答案 0 :(得分:1)
目前您的代码的行为是未定义,因为changeStr
是无操作的,并且您尝试使用未初始化的printf >变量tmp
。这说明了你的(任意)输出。在其他情况下,编译器可能会吃掉你的猫。
add
具有自动存储持续时间,tmpP
是来自调用者的&tmp
值复制的结果。这些赋值虽然完全有效,但对调用函数main()
不可见。
解决方案是写
*tmpP = "Hello World";
作为changeStr
中的唯一语句。
您应该注意tmp
中的main()
将指向只读字符串文字。
答案 1 :(得分:0)
您所做的是错误,tmpP=add;
您认为add
值将指向tmpP
。
如果要更改传递给function的字符串的值,可以这样做。我看到已经 @Bathseba 指出了。
试试这个,
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void changeStr (char ** tmpP){
char* test;
char** add=&test;
*tmpP= "Hello world !";
}
int main() {
/* Here it has string cruel that pass to function*/
char* tmp="Cruel";
changeStr(&tmp);
printf("\n %s \n",tmp);
return 0;
}
<强>输出:强>
Hello world !
你做了什么。
void changeStr (char ** tmpP){
char* test = "Hello world !";
char** add=&test;
tmpP=add; //<-- Here your assigning add to tmpP, it shouldn't.
}