所以我正在尝试创建一个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");
}
}
但它不起作用。
答案 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”命令)。