C关于将字符串作为函数表达式传递的问题

C关于将字符串作为函数表达式传递的问题,c,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

我想传递一个字符串来实现如下功能

 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.c334:类型为“flash unsigned char[11]”的函数参数1与类型为“unsigned char*”的必需参数不兼容

我认为字符串只是一个字符数组,我可以调用它

还有,有没有更好的方法来做到这一点


谢谢。

您需要包括并更改代码,以便

 if (!strcmp(get_type, "short_value"))

现在的情况是,您正在比较字符*get\u类型和指向字符短值的指针。

您应该将常量字符串作为常量字符*甚至常量字符*常量传递。
此外,c字符串是普通数组,对其使用==操作将只比较指针,而不是字符串。您应该使用strcmp函数进行比较。

字符串文字的类型为const char[],在函数调用中会衰减为const char*,因此您应该使函数的签名加倍获取\u valueconst char*

其次,当您取消引用*get_type时,您只会得到一个字符,而不是整个字符串!然后你试着把这个字符和一个数组进行比较,这个数组又会衰减成一个指针,这是行不通的。您需要的是strcmp或其变体:

if (!strcmp(get_type, "short_value")) { ... }`

如果愿意,您可以说strncmpget_type,short_value,12,并且只比较初始的12个字符,这是short_值的长度,包括其终止的空字节-这不是严格必要的,但是在使用字符串操作函数时最好知道字符串的长度。

第314行是哪一个?我可以告诉你,你需要使用strcmp。什么是flash unsigned char[11]?当我用字符串参数调用函数时,编译器会抱怨,它不应该抱怨。这是你的真实代码吗?它不应该抱怨。这是你的实际代码吗?const*char*的指针太多了,但是const*char*是传递不可变字符串的正确方法。哦,对不起,暂时的大脑功能失调,当然我指的是const*char-const,你现在指的不是const-char*const?嗯,凌晨3:54。确信。这些不是我要找的机器人。你的密码错了。想一想:如果两个字符串相等,strcmp会返回什么?我在微控制器平台中,我希望避免使用字符串。h@Programming发烧友-然后不要使用字符串。使用枚举或定义来拥有可以使用==进行测试并打开的名称。那么就不要使用字符串@大卫-我个人更喜欢!strcmp到strcmp==0,但我想这取决于您的编码标准。我通常不测试字符串是否大于或小于其他字符串,只有当它们等于其他字符串时,所以我从不被字符串的不对称性搞砸!strcmp与其他比较。或者说真的很邪恶,你可以定义STRCMPx,op,y STRCMPx,y op 0,并允许人们这样做,that@KerrekSB-让人们永远不要使用strcmp不是我的精神所在。教条式地避免一个函数,而对于一个只稍微安全一点的函数来说,它有时是不安全的,这不是一个好的编程方法。确保您的代码是安全的(例如,首先通过测试)是一种更好的做法。这样做怎么样,它可以工作,但不太清晰定义长值1定义短值2双获取值unsigned int;double get_value unsigned int get_type{if get_type==short_value{//calculate and return}否则if get_type==long_value{//calculate and return}`@编程爱好者:您实际上是在描述一个枚举,在任何情况下,哪一种解决方案都比字符串比较好。@编程:首先要比较字符串,现在要担心枚举的效率?:-但说真的,define和enum都是整数值,可能最终占用同一寄存器的最小空间,因此我更喜欢enum的语义性质,而不是哑宏。