C 命令行密码

标签 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]);
  }
  char pass = "password";
  if (argc == pass) {
    printf("Right\n");
  } else {
    printf("Wrong\n");
  }
}

但它不会工作。

最佳答案

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)

将这些修复程序放在一起,它应该可以工作。还请努力改进代码的缩进。这将使阅读变得更加容易,不仅对于其他人,而且在几周后您自己也是如此。

关于C 命令行密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4610889/

相关文章:

c - 打开外部程序

linux - 如何根据键盘事件在终端模式下自动启动脚本?

ruby - 使用不同的名称从命令行调用 ruby​​ gem

command-line-interface - 如何准确找到移动的工作空间?

c - 使用缓存局部性提高 C 函数性能?

c - 设置指向堆栈内存块的指针?

c - 为什么操作系统内核通常用 C 或 C++ 编写?

c++ - 将 UINT32 颜色格式从 AaBbGgRr 转换为 AaRrGgBb

c# - 安装的 Dotnet 工具在 Ubuntu WSL2 上给出错误 "Could not execute because the specified command or file was not found."

Python argparse 静态参数