gpt4 book ai didi

c - 如何检查 argv[count] 是否为整数

转载 作者:太空狗 更新时间:2023-10-29 14:50:40 26 4
gpt4 key购买 nike

我正在尝试用 C++ 创建一个命令行应用程序,我想确保输入是某个命令参数后的整数。

对于这个例子,我想检查“-p”命令参数之后的下一个参数是否是一个整数。这是我现在的代码片段。

while (count < argc){
if (strcmp("-p", argv[count]) == 0){
has_p = true; //Boolean
pid = atoi(argv[count + 1]);
if (pid == 0 && argv[count + 1] != "0" ){
err = 1;
cout << "pid argument is not a valid input" << endl;
pid = -1;
}
count++;
}
...
}

现在这段代码正确地捕获了这个输入中的错误:

  • -p 1777
  • -p sss
  • -p sss17
  • -p [空格] -U

但在此输入格式下失败

  • -p 17sss

我试图通过尝试使用 sprintf 进行比较来解决这个问题。不幸的是,为 sprintf 提供 char 数组指针只会在 buffer2 中输出 1 个字符。

while (count < argc){
if (strcmp("-p", argv[count]) == 0){
has_p = true; //Boolean
pid = atoi(argv[count + 1]);
sprintf(buffer, "%d", pid);
sprintf(buffer2, "%d", *argv[count + 1]);
if (pid == 0 && argv[count + 1] != "0" || (buffer != buffer2) ){
err = 1;
cout << "pid argument is not a valid input" << endl;
pid = -1;
}
count++;
}
...
}

有没有办法让 sprintf 读取整个 char 数组?如果没有,除了循环指针直到我点击“\0”

之外,是否有更好的解决方案

最佳答案

atoi() 不能做你想做的事。您需要使用 strtol()为达到这个。它大大提高了错误检查能力。

签名:

long int strtol(const char *nptr, char **endptr, int base);

此函数将转换后的整数作为 long int 值返回,否则返回零值。转换后,您可以查看 endptr 的内容并做出决定。

关于c - 如何检查 argv[count] 是否为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30348598/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com