1

我正在用 C 编写一个程序,这是我的代码:

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

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

4

2 回答 2

4

您的sscanf电话正在尝试读取-字符串中第一个(但不包括)的任何内容。由于-(大概)是第一个字符,它aux最终是空的。

您可以执行以下操作:sscanf(argv[1], "%*[-]%d", &n);. 这将跳过任何前导-字符,因此23,-23和的参数--23都将被同等对待。如果您想--23被解释为-23(只有一个前导破折号表示标志),那么您可以使用sscanf(argv[1], "-%d", &n);(在这种情况下,仅23在命令行上,转换将彻底失败)。

于 2011-11-23T17:27:28.967 回答
2

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

来自http://www.cplusplus.com/reference/clibrary/cstdio/sscanf/sscanf (str,"%d",&n);

于 2011-11-23T17:24:57.383 回答