这困扰我.它给了我一个警告
passing argument 1 of ‘funcName’ discards qualifiers from pointer target type
Run Code Online (Sandbox Code Playgroud)
但是,程序运行得很好并打印提交的值.
功能如下
void funcName(char *str) {
printf("%s", str);
}
void main() {
funcName("Hello world");
}
Run Code Online (Sandbox Code Playgroud)
输出是Hello world.
这是因为"Hello, world"是常数,所以将功能更改为
void funcName(const char *text)
{
printf("%s\n", text);
}
Run Code Online (Sandbox Code Playgroud)
字符串文字是常量,它们存储在程序的只读存储器部分中,传递指针而不会const意外地在目标函数内部意外修改它,如果这样做,会导致未定义的行为,并且编译器正在尝试为了保护你.
此外,void main()它不是标准的合规有效签名main(),您可以在标准之前的旧书中找到它,但现在它不再被接受,接受和标准签名是
int main(void) 如果您不处理命令行参数.int main(int argc, char **argv)处理argc存储在argv命令行中传递的参数的参数.