下面的代码片段是错误的.......但似乎工作正常
#include <stdio.h>
void fun(char* msg);
int main()
{
char* str = "Hello";
printf("%s\n",str);
fun(&str);
printf("%s\n",str);
return 0;
}
void fun(char* msg){
*msg = "World";
}
现在正确的代码段
#include <stdio.h>
void fun(char** msg);
int main()
{
char* str = "Hello";
printf("%s\n",str);
fun(&str);
printf("%s\n",str);
return 0;
}
void fun(char** msg){
*msg = "World";
}
上述代码的目的是修改str的值。 两个代码都产生相同的输出,但为什么在这种情况下错误的代码似乎正常工作。
答案 0 :(得分:5)
第一个不应该编译,因为&str
是char**
,但声明该函数采用char*
。
此外,在*msg = "World";
中,"World"
是char*
,但*msg
是单char
。