检查命令行参数中的任何字符是否不是 C 中的“1”或“0”

Checking to see if any character in a command line argument is not a '1' or a '0' in C

我正在编写的程序的一部分需要命令行参数中的二进制数,return它的值是十进制数。程序的一部分会检查以确保命令行参数是一个实际的二进制数(意味着它不包含数字 2-9)。这似乎实现起来相对简单,但由于某些原因这不起作用:

int i;
for (i = 0; i < strlen(argv[3] - 1); i++)
{
  if (argv[3][i] != '0' || argv[3][i] != '1' || argv[3][i] != '[=10=]')
  {
    printf("arg[3][%d]: %c\n", i, argv[3][i]);
    printf("ERROR: argument 3 is not a binary integer\n%);
    return 0;
  }
}

(argv[3] 是二进制值应该去的参数)。

即使我只是给它参数“0001”,它也会return:

"arg[3][0]: 0

错误:参数 3 不是二进制整数

其余代码工作正常,所以我知道这很明显我没有看到 if 语句中的逻辑。有帮助吗?

行:

if (argv[3][i] != '0' || argv[3][i] != '1' || argv[3][i] != '[=10=]')

将始终解析为真。您应该使用 && 作为 AND 而不是 || 作为 OR。

此外,您在 strlen(argv[3]-1); 中遇到了错误。我猜你实际上是指 strlen(argv[3])-1;,因为第一个将指向内存中的错误位置。但是你也不想要第二个,因为那样会错过最后一个字符。

以下是修改后的代码:

#include <stdio.h>
#include <string.h>

int main( int argc, char** argv )
{
    int i;
    for (i = 0; i < strlen(argv[3]); i++)
    {
        if (argv[3][i] != '0' && argv[3][i] != '1' && argv[3][i] != '[=11=]')
        {
            printf("arg[3][%d]: %c\n", i, argv[3][i]);
            printf("ERROR: argument 3 is not a binary integer\n");
            return 0;
        }
    }

    return 0;
}