Porówanie znaków zczytanych z konsoli

0

Witam,
Mam pobrać z konsoli ciąg znaków za pomocą

 int main(int argc, char *argv[])

i następnie porównać na if'ach tzn.

if(argv[1]="a")
// jakieś polecenie
if(argv[1]="b")
//jakieś polecenie 

I nie bardzo wiem jak się do tego zabrać.

1

po 1: = oznacza przypisanie. == to porównanie.

po 2: tak się nie porównuje - char* to tablica znaków. możesz porównywać char* za pomocą funkcji strcmp(). a jeśli to c++, to możesz robić tak:

string arg1 = argv[1];
if(arg1=="a")
...
0

hmmm
czyli mam zrobić coś takiego:

char *operacja = argv[1];
if( strcmp (operacja, "d") == 0 )
//jakieś polecenie
0

Lepiej dać:

strncmp(operacja, "d", 2);
0

nie rozumiem twojego zapisu. strcmp ma porównać te 3 napisy? Nie wiem po co ta 2.

0

Nie. To zapewni Ci bezpieczeństwo, że nie sprawdzi za dużo (exploity i takie tam).

0

char *operacja=argv[1];
strcmp(operacja,"d");
strncmp(operacja,"d",2);

  • jeżeli argv[1] nie jest zainicjalizowany czyli wywołano bez parametrów to w obu przypadkach - błąd.
  • jeżeli jest zainicjalizowany to w obu przypadkach sprawdzi dwa znaki.
    Może wyjaśnisz te swoi: - "exploity i takie tam"?
0

Przyjmujemy, że hakerowi udaje się w jakiś sposób nadpisać długość stringu w taki sposób, że przeszukiwać będzie więcej informacji ze stringa niż wymagane 2 potrzebne w programie. Wtedy może umieścić tam adres powrotu do shellcode umieszczonego gdzieś w pamięci i przejąć kontrolę nad przepływem programu.

0

Taaaaa, porównywanie oczywiście u ciebie coś nadpisuje, a hacker ten twój jest jakiś dziwny napis zmienić może zaś tą liczbę 2 - nie może!
Wiesz co, chyba o tej porze nie powinieneś odpowiadać na pytania na forum ;-P

1 użytkowników online, w tym zalogowanych: 0, gości: 1