如何将字符串值传递给C中的函数

Sle*_*k13 0 c string

这困扰我.它给了我一个警告

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.

Iha*_*imi 5

这是因为"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命令行中传递的参数的参数.