在c函数中传递字符串时发出警告

时间:2011-03-21 06:05:50

标签: c++ c pointers

我有一个将传递字符串并进行操作的函数。在函数调用中,我传递字符串,如myfunc ("hello");

在函数定义中我有

myfunc (char *array)
{
    xxxx
};

该程序工作正常,但它会抛出一个警告“传递'myfunc'参数1的指针目标在签名方面有所不同”。

如何纠正这个问题?

4 个答案:

答案 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 ...或更改编译器设置,以确定“字符串文字”是否已签名/未签名。