2015-05-18 15 views
7

Mam następujący kod, który kopiuje ciąg argumentów do tablicy char.Kopiowanie ciągu znaków z argv do tablicy char w C

char *str = malloc(strlen(argv[1]) + 1); 
strcpy(str, argv[1]); 

printf("%s\n", str); 

Dlaczego kiedy mijam po argumencie:

$6$4MfvmFOaDUaa5bfr$cvtrefr 

uzyskać:

MfvmFOaDUaa5bfr 

Zamiast całego łańcucha. Gdzieś stracę pierwszy numer. Próbowałem różnych metod i każdy z nich działa tak samo lub też nie działa.

Mój klucz to tylko sól (w tym przypadku) 4MfvmFOaDUaa5bfr lub $6$4MfvmFOaDUaa5bfr bez trzeciej cyfry $. Próbuję też uzyskać metodę kopiowania ciągu, gdy spotykam trzecie $, a następnie przestaję kopiować.

Odpowiedz

10

Ponieważ w ciągu $6$4MfvmFOaDUaa5bfr$cvtrefr Z $6, $4 i $cvtrefr są rozszerzane przez powłokę do pozycyjnych argumentów i zmiennych i wszystkie są puste.

Przepuścić argument z apostrofami:

./a.out '$6$4MfvmFOaDUaa5bfr$cvtrefr' 

co zapobiega rozszerzenie powłoki.

Powiązane problemy