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

发布于 2024-12-17 11:03:14 字数 267 浏览 2 评论 0原文

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

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

因此,如果我从命令行运行该程序: my_program -23,我想获得数字“23”以将其隔离在像整数一样的 var 中,但是这个不起作用,我不知道为什么......

I'm making a program in C and this is my code:

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

So, if I run the program from command line: my_program -23, I want to get the number "23" to isolate it in a var like an integer, but this don't work and I don't know why...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

迷鸟归林 2024-12-24 11:03:14

您的 sscanf 调用尝试读取字符串中第一个 - 之前(但不包括)的任何内容。由于 - (大概)是第一个字符,因此 aux 最终为空。

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

Your sscanf call is trying to read anything up to (but not including) the first - in the string. Since the - is (presumably) the first character, it aux ends up empty.

You could do something like: sscanf(argv[1], "%*[-]%d", &n);. This will skip across any leading - characters, so arguments of 23, -23 and --23 will all be treated identically. If you want --23 to be interpreted as -23 (only the one leading dash signals a flag), then you could use sscanf(argv[1], "-%d", &n); (and in this case, with just 23 on the command line, the conversion will fail outright).

时光暖心i 2024-12-24 11:03:14

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

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

check your sscanf format, and I assume aux is an integer?

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文