Тип char* без ограничения на длину строки для хранения любых символов - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Как можно определить char* таким образом, что бы длина его была равна строке из стандартного входного потока и что бы туда можно было положить любые символы хоть китайские иероглифы Было хорошо если ещё была возможность определить кодировку
Вроде есть ограничение на коды символов для типа char -127/127. Думаю могут быть символы числа которых выходят за эти рамки. Как работать с такими строками? Или это исключено?

Решение задачи: «Тип char* без ограничения на длину строки для хранения любых символов»

textual
Листинг программы
char *fgm(FILE *f)  // * Чтение строки с выделением памяти 1991
{ char *b;  int c, j=0, l=81;
   if (f==NULL || feof(f)) return(NULL);
   b = malloc(l);
a: c = getc(f);
   if (c=='\n' || c==EOF) {
       b[j++] = '\0';
       if (j!=l) b = realloc(b,j);
       return(b);
   }
   if (j >= l-1) { l += 80; b = realc(b,l); }
   b[j++] = c;
   goto a;
}

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

  1. Функция fgm принимает в качестве аргумента файловый указатель f и возвращает указатель на строку, прочитанную из файла.
  2. Если файловый указатель f равен NULL или достигнут конец файла (feof(f)), функция возвращает NULL.
  3. Функция выделяет память под строку, используя функцию malloc, размер которой определяется переменной l (81 байт).
  4. Происходит чтение символа из файла с помощью функции getc(f), и этот символ сохраняется в переменную c.
  5. Если символ является символом новой строки ('\n'), символом конца файла (EOF) или если достигнут предел выделенной памяти, то есть если j равно l, то выполняется блок кода:
    • Символ '\0' добавляется в строку по индексу j.
    • Если j не равно l, то память под строку увеличивается с помощью функции realloc, и указатель на строку обновляется соответственно.
    • Функция возвращает указатель на строку.
  6. Если символ не является символом новой строки, символом конца файла или если не достигнут предел выделенной памяти, то в переменную b записывается значение c, а переменная j увеличивается на 1.
  7. Затем происходит переход к шагу 4.
  8. Если достигнут предел выделенной памяти, то размер памяти увеличивается на 80 байт с помощью функции realloc, и указатель на строку обновляется соответственно.
  9. Значение c сохраняется в переменную b по индексу j, а переменная j увеличивается на 1.
  10. Происходит переход к шагу 4.

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

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