C пароль командной строки - PullRequest
3 голосов
/ 06 января 2011

Поэтому я пытаюсь создать программу на C, в которой вы должны ввести пароль в командной строке, например ./login password1. И если пароль - 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");
  }
}

Но он не будет работать.

Ответы [ 2 ]

4 голосов
/ 06 января 2011
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 голос
/ 06 января 2011

Вы сравниваете argc - количество аргументов командной строки - с "password" указателем строки.

Для начала вам нужно использовать argv[1] вместо argc. Вам также нужно использовать подходящую функцию strcmp, а не просто сравнивать указатели.

Наконец, ввод паролей через командную строку обычно является плохой идеей из соображений безопасности. Во многих системах командная строка может быть видна другим пользователям (например, с помощью команды "ps").

...