如何获得程序调用的第一个参数

时间:2011-11-23 17:20:38

标签: c scanf argv atoi

我在C中制作一个程序,这是我的代码:

int main(int argc, char **argv) {
    int n;
    char aux[10];
    sscanf(argv[1], "%[^-]", aux);
    n = atoi(aux);
}

所以,如果我从命令行运行程序:my_program -23,我想得到数字" 23"将它隔离成一个整数变量,但这不起作用,我不知道为什么......

2 个答案:

答案 0 :(得分:4)

您的sscanf来电正试图读取字符串中第一个-的内容(但不包括此内容)。由于-(大概)是第一个字符,因此aux最终为空。

您可以执行以下操作:sscanf(argv[1], "%*[-]%d", &n);。这将跳过任何前导-个字符,因此23-23--23的参数都将被视为相同。如果您希望将--23解释为-23(只有一个前导短划线标记一个标记),那么您可以使用sscanf(argv[1], "-%d", &n);(在这种情况下,仅使用23在命令行上,转换将彻底失败。

答案 1 :(得分:2)

检查你的sscanf格式,我假设aux是一个整数?

来自http://www.cplusplus.com/reference/clibrary/cstdio/sscanf/

sscanf(str,“%d”,& n);