我有一个,
int main (int argc, char *argv[])
我传入的其中一个争论是一个角色。当我去编译时,它会在标题中给出错误消息
我将如何解决这个问题?
此致
保
答案 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 ++中完全相同。