我有一个函数会传递一个字符串并进行操作。在函数调用我传递的字符串作为诸如此类myfunc ("hello");
在c函数中传递字符串时的警告
在函数的定义,我有
myfunc (char *array)
{
xxxx
};
程序工作正常,但它在传递的参数1抛出一个警告“指针的目标“ myfunc'在签名方面有所不同“。
如何纠正这个问题?
我有一个函数会传递一个字符串并进行操作。在函数调用我传递的字符串作为诸如此类myfunc ("hello");
在c函数中传递字符串时的警告
在函数的定义,我有
myfunc (char *array)
{
xxxx
};
程序工作正常,但它在传递的参数1抛出一个警告“指针的目标“ myfunc'在签名方面有所不同“。
如何纠正这个问题?
字符串实际上是的常量字符的数组。也就是说,"hello"
的类型是const char[6]
。
这是什么意思是你不能修改它。但是,由于C++中的傻瓜转换,数组(以字符串文字形式)可以隐式转换为指向第一个元素的非const常量指针。这是误导性的,而且很危险。 (事实上,一个const剥离隐式转换不存在任何其他地方。)
你应该确保你有一个,而不是修改缓冲区:
char buffer[] = "hello";
myfunc(buffer);
我认为这个警告是因为编译器可能将'char'视为无符号的一个点,并在另一个点进行签名。我不太确定。 – 2011-03-21 06:18:07
@Prasoon:哦,可能。 (我实际上撇弃了这个问题,努力让尽可能懒惰,同时仍然赢得声誉:)) – GManNickG 2011-03-21 06:35:49
哈哈:) [.....] – 2011-03-21 06:36:28
确保您的myfunc()
函数定义有char*
作为参数。我认为它有unsigned char *作为参数。或代码中的其他位置,您将通过unsigned char*
作为参数myfunc(char*)
。看看代码中的警告行。
如果你申报你的函数一样myfunc (const char *array)
包括更好的理解代码 – bubble 2011-03-21 06:28:04
感谢所有..它的工作..谢谢很多.. – user611469 2011-03-21 06:29:44
我觉得Prasoon是正确的。您的编译器将“字符串文字”视为unsigned char
。只需将您的函数更改为接受unsigned char
...或更改决定“字符串文字”是否已签名/未签名的编译器设置。
您需要包含代码。 – user623879 2011-03-21 06:13:49
C或C++?答案是一样的,但技术不同。 – GManNickG 2011-03-21 06:16:22