2011-03-21 71 views
0

我有一个函数会传递一个字符串并进行操作。在函数调用我传递的字符串作为诸如此类myfunc ("hello");在c函数中传递字符串时的警告

在函数的定义,我有

myfunc (char *array) 
{ 
    xxxx 
}; 

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

如何纠正这个问题?

+1

您需要包含代码。 – user623879 2011-03-21 06:13:49

+1

C或C++?答案是一样的,但技术不同。 – GManNickG 2011-03-21 06:16:22

回答

2

字符串实际上是的常量字符的数组。也就是说,"hello"的类型是const char[6]

这是什么意思是你不能修改它。但是,由于C++中的傻瓜转换,数组(以字符串文字形式)可以隐式转换为指向第一个元素的非const常量指针。这是误导性的,而且很危险。 (事实上​​,一个const剥离隐式转换不存在任何其他地方。)

你应该确保你有一个,而不是修改缓冲区:

char buffer[] = "hello"; 
myfunc(buffer); 
+1

我认为这个警告是因为编译器可能将'char'视为无符号的一个点,并在另一个点进行签名。我不太确定。 – 2011-03-21 06:18:07

+0

@Prasoon:哦,可能。 (我实际上撇弃了这个问题,努力让尽可能懒惰,同时仍然赢得声誉:)) – GManNickG 2011-03-21 06:35:49

+0

哈哈:) [.....] – 2011-03-21 06:36:28

0

确保您的myfunc()函数定义有char*作为参数。我认为它有unsigned char *作为参数。或代码中的其他位置,您将通过unsigned char*作为参数myfunc(char*)。看看代码中的警告行。

0

如果你申报你的函数一样myfunc (const char *array)

+0

包括更好的理解代码 – bubble 2011-03-21 06:28:04

+0

感谢所有..它的工作..谢谢很多.. – user611469 2011-03-21 06:29:44

0

我觉得Prasoon是正确的。您的编译器将“字符串文字”视为unsigned char。只需将您的函数更改为接受unsigned char ...或更改决定“字符串文字”是否已签名/未签名的编译器设置。

相关问题