C命令行密码

时间:2011-01-06 01:09:09

标签: c command-line-interface

所以我正在尝试创建一个C程序,你必须在命令行输入密码,比如 ./login password1 如果密码是密码1,它会说些什么。如果没有,它会打印另一条消息。这是我现在的代码:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  if (argc < 2) {
    printf("usage: %s <password>\n", argv[0]);
  }
  char pass = "password";
  if (argc == pass) {
    printf("Right\n");
  } else {
    printf("Wrong\n");
  }
}

但它不起作用。

2 个答案:

答案 0 :(得分:4)

char pass = "password";

您正在尝试将字符串分配给char。那不行!相反,您需要将pass声明为char[],如下所示:

char pass[] = "password";

下一个问题:

if(argc == pass)

argc是传递给程序的命令行参数的数量(包括作为第一个的程序名称)。你想要的是argv,它包含实际的参数。具体来说,您可能需要argv[1]

你不能只是去argv[1] == pass,因为它会比较两个字符串的位置。要比较字符串,您需要使用strcmp()。此函数比较两个字符串,如果它们相等则返回0(这是有充分理由的,但现在就保留它)。前者就像比较两个房子,检查他们是否有完全相同的街道地址;后者就像把房子相互比较一样。 (从@caf狙击)

因此该行变为:

if (strcmp(argv[1], pass) == 0)

将这些修复程序放在一起,它应该可以正常工作。还请努力改进代码的缩进。它会让你更容易阅读,不仅仅是为了别人,而是在几周之内。

答案 1 :(得分:1)

您将argc - 命令行参数的数量 - 与"password"字符串指针进行比较。

首先,您需要使用argv[1]代替argc。您还需要使用合适的strcmp函数,而不仅仅是比较指针。

最后,出于安全考虑,通过命令行输入密码通常是个坏主意。在许多系统上,命令行可能对其他用户可见(例如,通过“ps”命令)。