2014-02-17 5 views
0

Я пытаюсь прочитать строку на C++ с помощью scanf. Я попробовалЧтение строки в C++ с помощью scanf

char cmd[40]; 
scanf("%s", cmd); 
string str(cmd); 

Но это дает мне строку, в которой я хочу иметь плюс некоторые нечувствительные символы.

+0

Убедитесь, что вы не вводите не более 40 символов – Avt

+0

я нет. C++ добавляет символы, чтобы их было 40. – user2062607

+1

Почему scanf в C++? Также используйте ограниченную строку scanf, поэтому вы не можете выходить из предварительно распределенного массива. – Xarn

ответ

6

scanf с спецификатором %s будет хранить нулевой ограничитель после входной строки, которая предотвращает попадание символов мусора в строку ... если ваш код не имеет неопределенного поведения.

Возможно, ваша проблема переполнена буфером, что приводит к неопределенному поведению; При использовании спецификатора %s без соответствующего размера буфера scanf может писать за пределами границ буфера. В этом случае у вас нет гарантий относительно того, как будет вести себя программа.

Никогда не используйте %s с scanf wihtout обеспечивая размер буфера:

char cmd[40]; 
scanf("%39s", cmd); 
string str(cmd); 
+0

Извините. Я, вероятно, был недостаточно ясен. Я не знаю точных размеров струн. Я просто знаю, что это не более 40. – user2062607

+2

@ user2062607: Сделать буфер 41, затем –

+0

@ user2062607 Размер буфера, который вы даете scanf, - это максимум, который он будет читать. Если входная строка короче, тогда scanf остановится до этого. Как говорит Mooing Duck, если строка может быть длиной 40 символов, тогда есть буфер из 41 символа и скажите scanf, чтобы читать не более 40 символов. – bames53

Смежные вопросы