LINUX.ORG.RU

длина строки С

 ,


0

1

Собственно очень простой вопрос. Есть кусок кода:

char a[2];
scanf("%s", a);
Если ввести строку заведомо большей длины, то она вся сохраняется. Я так понимаю, это потому, что длину массива никто не проверяет. Как избежать такого поведения? Никогда не задавать константной длину строки?

★★★★

Собственно очень простой вопрос.

Собственно очень непростой вопрос. Начинать на него отвечать надо с постановки задачи. Что тебе угодно: избежать переполнения буфера, ограничив длину считываемой строк или считать потенциально бесконечно длинную строку?

t184256 ★★★★★
()

Никогда не использовать сканф таким образом.

anonymous
()

ты бы ещё gets использовал.

alegz ★★★★
()

Как избежать такого поведения?

Сменить язык.

greenman ★★★★★
()

длину массива никто не проверяет

Не никто, а ты лично :D

melkor217 ★★★★★
()

Если не сделать, как советуют товарищи выше:(i-rinat, hateyoufeel) произойдет переполнение буфера.

ChuCha
()

Как избежать такого поведения?

Можно так, например:

char* input;
scanf("%10ms", &input);

/* do something */
	
free(input);

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)

Вангую тред на 12567 страниц.

anonymous
()

Почитай man getline, если свой аналог не хочется пилить.

А scanf лучше вообще не использовать.

Eddy_Em ☆☆☆☆☆
()

никогда не использовать C

anonymous
()

видел тред на одной странице.

PS
scanf(«%1s», a);

dikiy ★★☆☆☆
()
Ответ на: комментарий от Deleted

Меня это настораживает. Разве scanf выделяет какую-то память? Он же просто пишет туда, куда ему скажут. А указатель будет указывать в небо, ты его ничем не инициализировал. А потом ты еще и делаешь free на память которую не выделял.

WRG ★★★★
()
Ответ на: комментарий от WRG

Разве scanf выделяет какую-то память?

man scanf -> NOTES.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.