Я пытаюсь прочитать строку на C++ с помощью scanf. Я попробовалЧтение строки в C++ с помощью scanf
char cmd[40];
scanf("%s", cmd);
string str(cmd);
Но это дает мне строку, в которой я хочу иметь плюс некоторые нечувствительные символы.
Я пытаюсь прочитать строку на C++ с помощью scanf. Я попробовалЧтение строки в C++ с помощью scanf
char cmd[40];
scanf("%s", cmd);
string str(cmd);
Но это дает мне строку, в которой я хочу иметь плюс некоторые нечувствительные символы.
scanf
с спецификатором %s
будет хранить нулевой ограничитель после входной строки, которая предотвращает попадание символов мусора в строку ... если ваш код не имеет неопределенного поведения.
Возможно, ваша проблема переполнена буфером, что приводит к неопределенному поведению; При использовании спецификатора %s
без соответствующего размера буфера scanf
может писать за пределами границ буфера. В этом случае у вас нет гарантий относительно того, как будет вести себя программа.
Никогда не используйте %s
с scanf
wihtout обеспечивая размер буфера:
char cmd[40];
scanf("%39s", cmd);
string str(cmd);
Извините. Я, вероятно, был недостаточно ясен. Я не знаю точных размеров струн. Я просто знаю, что это не более 40. – user2062607
@ user2062607: Сделать буфер 41, затем –
@ user2062607 Размер буфера, который вы даете scanf, - это максимум, который он будет читать. Если входная строка короче, тогда scanf остановится до этого. Как говорит Mooing Duck, если строка может быть длиной 40 символов, тогда есть буфер из 41 символа и скажите scanf, чтобы читать не более 40 символов. – bames53
Убедитесь, что вы не вводите не более 40 символов – Avt
я нет. C++ добавляет символы, чтобы их было 40. – user2062607
Почему scanf в C++? Также используйте ограниченную строку scanf, поэтому вы не можете выходить из предварительно распределенного массива. – Xarn