关于将字符串作为函数参数传递的问题

时间:2011-08-03 00:36:42

标签: c

我想将字符串传递给这样的函数..

 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数组,我可以称之为..

此外,还有更好的方法吗?

谢谢..

3 个答案:

答案 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”的长度,包括它的终止空字节 - 不是绝对必要的,但是知道一个字符串是很好的使用字符串操作函数时的长度。