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

时间:2019-06-10 10:28:47

标签: c++ warnings

非常简单的代码会警告我。一些提示不是建设性的。警告是:

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

我尝试过:

char const *q = "pin";
char const *r = "\n\r";
{
while(client.findUntil(*q, *r)) 

没有成功

原始代码:

while(client.findUntil("pin", "\n\r"))

1 个答案:

答案 0 :(得分:1)

  

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

# if using yarn
$(yarn bin)/ts-node $(yarn bin)/tslint -p .
# if using npm
$(npm bin)/ts-node $(yarn bin)/tslint -p .

警告表示您的程序格式错误。您没有显示声明,但是根据上下文,我们可以推断出while(client.findUntil("pin", "\n\r")) 的参数为findUntil。您不得将字符串文字传递给此类函数。

它过去格式正确-但已过时-在C ++ 11之前传递字符串文字为char*

  

我尝试过:

char*

这些都是正确的,但是

char const *q = "pin";
char const *r = "\n\r";

这没有任何意义。以前您尝试传递字符串,但是现在您通过字符指针间接访问,因此您传递了字符。除非该函数是模板,否则它可能无法工作。

while(client.findUntil(*q, *r)) 也不起作用,因为指向const的指针不会隐式转换为指向非const的指针。

正确的解决方案是将字符串文字复制到可修改的数组中:

findUntil(q, r)

另一种方法是修复char q[] = "pin"; char r[] = "\n\r"; { while(client.findUntil(q, r)) 以接受指向const char的指针。然后,您可以使用字符串文字,因为它们可以转换为指向const char的指针。