我想将字符串传递给这样的函数..
long_var = get_value("long_value");
short_var = get_value("short_value");
在函数内部,我做了这个..
double get_value(char *get_type){
if (*get_type == "short_value")
{
//calculate and return
}
else if (*get_type == "long_value")
{
//calculate and return
}
}
但是,我有一个错误 错误:main.c(334):'flash unsigned char [11]'类型的函数参数#1与'unsigned char *'类型的必需参数不兼容
我认为字符串只是一个char数组,我可以称之为..
此外,还有更好的方法吗?
谢谢..
答案 0 :(得分:6)
您需要包含<string.h>
并将代码更改为
if (!strcmp(get_type, "short_value"))
现在的情况是,您将字符(*get_type
)与指向字符("short_value"
)的指针进行比较。
答案 1 :(得分:4)
您应该将常量字符串作为“const char *”或甚至“const char * const”传递。 此外,c字符串是普通数组,对它们使用==操作只会比较指针,而不是字符串。您应该使用strcmp函数进行比较。
答案 2 :(得分:3)
字符串文字的类型为const char[]
,在函数调用中衰减为const char *
,因此您应该对函数double get_value(const char *)
进行签名。
其次,当您取消引用*get_type
时,您只能获得一个字符,而不是整个字符串!然后你试图将该char与一个数组(它再次衰减到一个指针)进行比较 - 这是行不通的。您需要的是strcmp
(或其变体版本):
if (!strcmp(get_type, "short_value")) { ... }`
如果您愿意,可以说strncmp(get_type, "short_value", 12)
并且只比较最初的12个字符,这是“short_value”的长度,包括它的终止空字节 - 不是绝对必要的,但是知道一个字符串是很好的使用字符串操作函数时的长度。