gpt4 book ai didi

c - 在 C 中将非常量参数传递给 const 函数参数

转载 作者:行者123 更新时间:2023-11-30 14:56:46 25 4
gpt4 key购买 nike

我有一个函数,它指定一个 const 参数以向调用者表明它不会被修改:

int func1(const char *some_string) 
{
// Do something non-destructive with some_string
}

我将一个非常量变量作为参数传递给 func1:

int func2(void)
{
char *my_string = "my text";
func1(my_string);
}

海湾合作委员会报告:

warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]

处理这种情况的正确方法是什么?创建 my_string 的常量副本似乎有点多,但简单地转换似乎掩盖了警告。

最佳答案

您遇到的问题源于您的 main 函数。

当您声明 char *my_string = "my text"; 时,您正在创建一个指向字符串文字的非常量指针。按照设计,诸如“my text”之类的字符串文字是不可变的,因此在语言中是常​​量。 (实际上,编译器通常将字符串文字放入包含只读内存的可执行文件的特定部分,因此尝试使用非常量指针修改文字可能会导致段错误。)

通过声明一个指向字符串文字的非常量指针,您最终会得到一个可以用来修改不可变字符串文字的指针,这在 C 中被认为是未定义的行为。

参见this question了解更多信息。

解决此问题的最简单方法是将 char *my_string 更改为 const char *my_string

关于c - 在 C 中将非常量参数传递给 const 函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44430775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com