Указатель на строку неизвестного размера - C (СИ)
Формулировка задачи:
Доброго времени суток. Возник вопрос при работе с символьными массивами. Если имеется указатель на символьный тип и при помощи scanf() вводится строка,сколько доступно места для ввода символов, и как можно с помощью malloc зарезервировать память под символьный массив.
тут почему то оба массива заполняются до какого то момента..
#include<stdio.h> int main() { char *str1 = (char*)malloc(sizeof(char)), *str2; scanf("%s",str1); scanf("%s",str2); printf("%s\n%s",str1,str2); }
Решение задачи: «Указатель на строку неизвестного размера»
textual
Листинг программы
char * s = malloc(256); if ( ! s ) { // ошибка выделения памяти // лучше приучить себя всегда проверять значения, возвращаемые функциями // и должным образом на них реагировать } if ( scanf("%255s", s) != 1 ) { // ошибка чтения, scanf возвращает количество удачно присвоенных значений, // в данном случае при удачном выполнении должна 1 вернуть } ...
Объяснение кода листинга программы
- Объявлена переменная
s
типаchar*
и инициализирована указателем на выделенную память с помощью функцииmalloc(256)
. Если выделение памяти не удалось, то переменнаяs
будет равнаNULL
. - Проверяется успешность выделения памяти с помощью условного оператора
if ( ! s )
. Если память не была выделена, то программа выведет сообщение об ошибке и возможно выполнит какое-то действие, например, выведет сообщение об ошибке и завершит работу. - Проверяется успешность чтения строки с помощью функции
scanf(
%255s, s)
. Если чтение строки не удалось, то программа выведет сообщение об ошибке и возможно выполнит какое-то действие, например, выведет сообщение об ошибке и завершит работу. ...