我有一个将传递字符串并进行操作的函数。在函数调用中,我传递字符串,如myfunc ("hello");
在函数定义中我有
myfunc (char *array)
{
xxxx
};
该程序工作正常,但它会抛出一个警告“传递'myfunc'参数1的指针目标在签名方面有所不同”。
如何纠正这个问题?
答案 0 :(得分:2)
字符串实际上是常量字符的数组。也就是说,"hello"
的类型为const char[6]
。
这意味着您无法修改它。但是,由于C ++中的傻转换,数组(以字符串文字形式)可以隐式转换为指向第一个元素的非const 指针。这是误导和危险的。 (实际上,const-stripping隐式转换在其他任何地方都不存在。)
你应该确保你有一个可修改的缓冲区:
char buffer[] = "hello";
myfunc(buffer);
答案 1 :(得分:0)
确保myfunc()
函数的定义具有char*
作为参数。我认为,它有unsigned char *作为参数。或者代码中的其他位置,您将unsigned char*
作为参数传递给myfunc(char*)
。查看代码中的警告行。
答案 2 :(得分:0)
如果您声明自己的功能myfunc (const char *array)
答案 3 :(得分:0)
我认为Prasoon是对的。您的编译器将“字符串文字”视为unsigned char
。只需将您的函数更改为接受unsigned char
...或更改编译器设置,以确定“字符串文字”是否已签名/未签名。