C命令行密码

C命令行密码,c,command-line-interface,C,Command Line Interface,因此,我尝试创建一个C程序,您必须在命令行中输入密码,如 /登录密码1 如果密码是password1,它会说些什么。如果没有,它将打印另一条消息。这是我现在拥有的代码: #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { if (argc < 2) { printf("usage: %s <password>\n", argv[0]); }

因此,我尝试创建一个C程序,您必须在命令行中输入密码,如 /登录密码1 如果密码是password1,它会说些什么。如果没有,它将打印另一条消息。这是我现在拥有的代码:

#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");
  }
}
#包括
#包括
int main(int argc,char*argv[])
{
如果(argc<2){
printf(“用法:%s\n”,argv[0]);
}
char pass=“password”;
如果(argc==通过){
printf(“右”);
}否则{
printf(“错误的\n”);
}
}

但是它不起作用。

您正在将命令行参数的计数
argc
“password”
字符串指针进行比较

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

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

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

char pass[] = "password";
下一个问题:

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

您不能只去
argv[1]==pass
,因为这会比较两个字符串的位置。要比较字符串,需要使用
strcmp()
。此函数比较两个字符串,如果它们相等,则返回0(这是有充分理由的,但暂时不使用)。前者就像比较两所房子,检查它们是否有完全相同的街道地址;后者就像是一块砖一块砖地比较房子。(摘自@caf)

因此,这条线变成:

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

把这些修复放在一起,它应该会起作用。请同时改进代码的缩进。几周后,不仅对其他人,而且对你自己来说,这将使阅读变得更加容易。

学习如何报告问题永远不为时尚早。它究竟是如何不起作用的?你看到的症状是什么?这与你问的问题无关,但是在某些系统(Linux)上,命令行对于其他进程是可见的(在<代码> /PRO//CMDLINE < /代码>)中,所以你不应该考虑命令行参数的秘密。此信息可能在其他几个系统上可用(不确定)。(我认为这很愚蠢)这不是出于安全原因,现在我知道这是一个安全问题,如果这样做的话指针比较不会太复杂:
argc[1]==pass
正在比较两个字符串的位置
strcmp()
比较它们的内容。前者就像比较两所房子,检查它们是否有完全相同的街道地址;后者就像是一块砖一块砖地比较房子。@caf+1很好的解释!我希望你不要把这句话加到我的答案上。如果是,请随意回滚。@caf:No,argc[1]不是字符串的位置。argc是一个INT。argc[1]没有任何有意义的值。argv[1]是字符串@阿贝伦基:很明显,这是一个打字错误(所以已经颁布法令,现在修复它为时已晚)。
if (strcmp(argv[1], pass) == 0)