2015-05-18 25 views
7

Ho il seguente codice che copia l'argomento stringa in array di caratteri.Copia stringa da argv a char array in C

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

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

Perché quando passo seguente argomento:

$6$4MfvmFOaDUaa5bfr$cvtrefr 

ottengo:

MfvmFOaDUaa5bfr 

Invece di intera stringa. Da qualche parte perdo il primo numero. Ho provato vari metodi e ognuno funziona allo stesso modo o non funziona.

La mia chiave è ottenere solo il sale (in questo caso) 4MfvmFOaDUaa5bfr o $6$4MfvmFOaDUaa5bfr senza terzo carattere $. Cerco anche di ottenere il metodo per copiare la stringa mentre incontro il terzo $ e poi smetto di copiare.

risposta

10

Poiché nella stringa $6$4MfvmFOaDUaa5bfr$cvtrefr, il $6, $4 e $cvtrefr sono espansi dalla shell per argomenti posizionali e variabili e sono tutti vuoti.

passare l'argomento con apici:

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

che impedirà l'espansione della shell.