Копирование строки из argv в массив символов в C

у меня есть следующий код, который копирует строку аргумента в массив char.

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

printf("%sn", str);

почему, когда я передаю следующий аргумент:

MfvmFOaDUaa5bfr$cvtrefr

Я:

MfvmFOaDUaa5bfr

вместо целой строки. Где-то я теряю первый номер. Я пробовал различные методы, и каждый работает одинаково или не работает.

мой ключ-получить только соль (в этом случае) 4MfvmFOaDUaa5bfr или MfvmFOaDUaa5bfr без третьего символа$. Я пытаюсь также получить метод для копирования строки, пока я встречаю третий $, а затем прекратите копирование.

1 ответов


потому что в строке MfvmFOaDUaa5bfr$cvtrefr на , и $cvtrefr расширяются оболочкой для позиционных аргументов и переменных, и все они пусты.

передайте аргумент с одинарными кавычками:

./a.out 'MfvmFOaDUaa5bfr$cvtrefr'

что предотвратит расширение оболочки.