从'char *'到'char'的无效转换

时间:2010-04-07 16:31:11

标签: c++ gcc g++

我有一个,

int main (int argc, char *argv[])

我传入的其中一个争论是一个角色。当我去编译时,它会在标题中给出错误消息

我将如何解决这个问题?

此致

4 个答案:

答案 0 :(得分:3)

当您传递命令行参数时,无论它们可能代表什么类型,它们都将作为字符串传递。如果在命令行上传递“10”,则实际上是在传递字符数组

{ '1', '0', '\0' }

不是整数10

如果您想要的参数由一个字符组成,您可以随时只取第一个字符:

char timer_unit = argv[2][0];

答案 1 :(得分:2)

如果您只想要参数中的第一个字符,则以下内容将从字符串中提取它:

char timer_unit = argv[2][0];

问题是argv [2]是char *(C-string)而不是char。

答案 2 :(得分:0)

你可能没有传递你的想法(尽管这应该来自命令行)。请显示完整的错误消息和代码,但看起来您需要将第二个参数作为char * argv []处理,而不是char argv [] - 即作为字符数组的列表,而不是单字符数组。

答案 3 :(得分:0)

当你将它们作为参数传递给程序时,一切都会保留字符串,即使它们是单个字符。例如,如果您的程序名为“myprog”,并且您在命令行中使用了该程序:

myprog arg1 53 c a "hey there!"

然后您在该计划中获得的内容如下:

printf("%d\n", argc);
for(int i = 0; i < argc; i++)
{
    printf("%s\n", argv[0]);
}

输出结果为:

6
myprog
arg1
53
c
a
hey there!

关键是命令行上的所有内容都会变成以空字符结尾的字符串,甚至是单个字符。如果你想从命令行获取char'c',你需要这样做:

char value = argv[3][0];

char value = argv[3];  // Error!

即使“53”的值也不会变成int。你做不到:

int number = argv[2]; // Error!

argv[2]{ '5', '2', '\0' }。你必须这样做:

int number = atoi(argv[2]);  // Converts from a string to an int

我希望这很清楚。

编辑:顺便说一下,上面的所有内容都与C有效(因此是printf语句)。它在C ++中完全相同。