Я написал небольшую программу, которая принимает некоторые входные параметры из *argv[]
и печатает их. Почти во всех случаях использования мой код работает отлично. Проблема возникает только тогда, когда я использую более одного восклицательного знака в конце строки, которую я хочу передать в качестве аргумента...
Это работает:
./program -m "Hello, world!"
Это не работает:
./program -m "Hello, world!!!!"
^^ Если я это сделаю, вывод программы будет либо в две строки, либо в предыдущую команду. /program.
Однако, что я абсолютно не понимаю: следующее, как ни странно, работает:
./program -m 'Hello, world!!!!'
^^ Выход точно...
Hello, world!!!!
... так же, как хотелось бы.
Итак, мои вопросы:
- Почему это странное поведение возникает при использовании нескольких восклицательных знаков в строке?
- Насколько я знаю, в C вы используете
""
для строк и''
для отдельных символов". Так почему я получаю желаемый результат при использовании''
, но не при использовании""
как должен (в моем понимании)? - Есть ли ошибка в моем коде или что мне нужно изменить, чтобы иметь возможность вводить любую строку (независимо от того, что, сколько и сколько знаков препинания используется) и получить именно эту строку?
Соответствующие разделы моего кода:
// this is a simplified example that, in essence, does the same
// as my (significantly longer) code
int main(int argc, char* argv[]) {
char *msg = (char *)calloc(1024, sizeof(char));
printf("%s", strcat(msg, argv[2])); // argv[1] is "-m"
free(msg);
}
Я уже попробовал сначала скопировать содержимое argv[2]
в буфере char*
и добавить к нему '\0'
, что ничего не изменило.