我搜索了很长时间才找到答案,但我只能找到 solution对于似乎不适用于 C
的 C++
。我正在尝试将 const char *
的参数转换为 char
以便在我的 switch
语句中使用。我尝试了各种方法,例如 strdup()
,但没有成功。
#include <stdio.h>
int main(int argc, const char *argv[]) {
char argOne = argv[1];
char argTwo = argv[2];
switch(argOne) {
case '1234' :
printf("1234!\n" );
break;
default :
printf("Invalid\n" );
}
}
编译时:
warning: incompatible pointer to integer conversion initializing 'char' with an expression of type 'const char *' [-Wint-conversion]
char argOne = argv[1]; ^ ~~~~~~~
warning: overflow converting case value to switch condition type (825373492 to 52) [-Wswitch]
case '1234' : ^
最佳答案
在你的代码中,
第 1 点:
char argOne = argv[1];
是非常错误的。您不能将
const char *
(指针)指向char
变量。第 2 点:
case '1234'
也错了。这里,
'1234'
不表示一个字符串。它是一个多字节字符,这很可能是您不想要的。同样,即使您将其更改为类似“1234”
的内容,它仍然不正确,因为它不会为您提供预期值,并且 strings 不能用于case
语句 values。
解决方案:您可以尝试使用 strcmp()
而不是使用 switch
大小写比较传入的字符串并相应地进行选择。
注意:main()
的推荐签名是int main(int argc, char *argv[])
关于C 将 const char * 转换为 char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30571492/