ISO C++禁止在尝试运行 C 代码时将字符串常量转换为 Visual Studio 代码中显示的'char*' [-Wwrite-strings] 错误



我正在尝试使用Visual Studio代码运行以下代码,该代码采用字符串参数并以字符为单位返回C语言中的字符串长度,但我得到了:

错误消息:

ISO C++禁止将字符串常量转换为"char*"[-Wwrite strings]

这是我的代码:

int str_length(char *mystring){
int i=0;
for(i=0; mystring[i]!=''; i++);
return i;
}
void alpha(){
printf("%dn", str_length("-h=123"));
printf("%dn", str_length(""));
}

我被这个任务卡住了,也许你可以提供一个可能的解决方案,或者我必须更改的代码的某些部分?

这意味着您正在将程序编译为C++程序。

在C++中,与C相反的字符串文字具有常量字符数组的类型。

来自C++17标准(5.13.5字符串文字(

8还引用了普通字符串文字和UTF-8字符串文字到作为窄字符串文字窄字符串文字具有类型"n const char的数组">,其中n是字符串的大小定义如下,并且具有静态存储持续时间(6.7(

但即使在C中,函数参数也应具有限定符const,因为函数不会更改传递的字符串。的功能如下

size_t str_length( const char *mystring )
{
size_t i = 0;
while ( mystring[i] != '' ) i++;
return i;
}

因此,在函数alpha中,您需要编写

printf("%zun", str_length("-h=123"));
printf("%zun", str_length(""));

将转换说明符从CCD_ 3改变为CCD_。带符号类型int可能不够大,无法存储任意字符串的长度。

最新更新