我正在编写的程序的一部分期望命令行参数中有一个二进制数,并将其值作为十进制数返回。程序的一部分检查以确保命令行参数是一个实际的二进制数字(意味着它不包含数字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] != '\0')
{
printf("arg[3][%d]: %c\n", i, argv[3][i]);
printf("ERROR: argument 3 is not a binary integer\n%);
return 0;
}
}(argv3是二进制值应该去的参数)。
即使我只是给它一个"0001“的论点,它也会返回:
"arg3: 0
错误:参数3不是二进制整数“
其余的代码工作正常,所以我知道这是显而易见的事情,我看不到if语句中的逻辑。有什么帮助吗?
发布于 2015-10-12 02:56:49
这句话:
if (argv[3][i] != '0' || argv[3][i] != '1' || argv[3][i] != '\0')将永远坚定地为真。您应该对OR使用&&,而不是||。
此外,您在strlen(argv[3]-1);中有一个bug。我猜您实际上是指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] != '\0')
{
printf("arg[3][%d]: %c\n", i, argv[3][i]);
printf("ERROR: argument 3 is not a binary integer\n");
return 0;
}
}
return 0;
}https://stackoverflow.com/questions/33072537
复制相似问题