Указатель на строку неизвестного размера - 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 вернуть
}
...

Объяснение кода листинга программы

  1. Объявлена переменная s типа char* и инициализирована указателем на выделенную память с помощью функции malloc(256). Если выделение памяти не удалось, то переменная s будет равна NULL.
  2. Проверяется успешность выделения памяти с помощью условного оператора if ( ! s ). Если память не была выделена, то программа выведет сообщение об ошибке и возможно выполнит какое-то действие, например, выведет сообщение об ошибке и завершит работу.
  3. Проверяется успешность чтения строки с помощью функции scanf(%255s, s). Если чтение строки не удалось, то программа выведет сообщение об ошибке и возможно выполнит какое-то действие, например, выведет сообщение об ошибке и завершит работу. ...

Оцени полезность:

10   голосов , оценка 4.4 из 5
Похожие ответы