下面的代码片段产生相同的输出。但哪个是对的?
The below code snippets produce the same output. But which is right?
下面的代码片段是错误的......但似乎工作正常
#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";
}
上面代码的objective是修改str的值
两种代码产生相同的输出,但为什么错误的代码在这种情况下似乎可以正常工作。
第一个不应该编译,因为&str
是一个char**
,但是函数被声明为取一个char*
.
此外,在 *msg = "World";
中,"World"
是一个 char*
,但 *msg
是一个 char
。
下面的代码片段是错误的......但似乎工作正常
#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";
}
上面代码的objective是修改str的值 两种代码产生相同的输出,但为什么错误的代码在这种情况下似乎可以正常工作。
第一个不应该编译,因为&str
是一个char**
,但是函数被声明为取一个char*
.
此外,在 *msg = "World";
中,"World"
是一个 char*
,但 *msg
是一个 char
。