В идеале вы должны где-то контролировать статус ваших «строк». Структура: указатели + флаги для существования + флаги для инициализации + флаги для доступа.
struct arrstring {
p_string * Strings;
// flags of allocation
p_exist * ExistFlag;
// flags tracking initialization with values
p_init * InitStrings;
// flags allowing access/lock
p_access * AccessF;
p_mutex * LockStrings;
}
Таким образом, вы можете создать все строки одним вызовом 'callo c ()', но инициализировать их позже .
PS.
Здесь, в sizeof (char *) вы берете размер указателя, я не знаю ваших намерений, но это выглядит как недоразумение. Вы можете определить максимальный размер вашей строки, например, 512 байт, и выделить его с помощью mallo c (MAX_SIZE * sizeof (char)).
Также использование 'char' для строк является устаревшей функцией. Подходит для тестирования, но сегодня существуют реальные символы, и «char» используется только как акроним «байта» (это работает, потому что UTF-8 является общепринятым, а наименьшие значения размера UTF-8 выбираются одновременно с ASCII).
PS2. Стандарт C17 подтверждает, что "uchar.h" и "wchar.h" широко приняты и поддерживаются средами C. Таким образом, пользователи могут иметь дело с символами соответственно, если они выходят за пределы типа 'char'.
PS3. Ну, а про C стандарты про персонажей. C всегда были "молчаливы", когда речь заходит о персонажах, и различные системы решают это по-разному. Таким образом, способ, которым C работает со строками, называется "C strings", чтобы различать guish it. В «C strings» длина строк всегда измеряется в «char» или «wchar_t», которые имеют фиксированный размер, , даже если сама строка кодируется с переменной шириной , это может привести к проблемам, потому что символы большой ширины будут интерпретироваться как несколько символов. Но размер «char» всегда будет фиксироваться сам, на некоторых машинах он был 6 бит, на некоторых машинах он был 12 бит. Теперь он в основном 8-битный, поэтому программисты в большинстве случаев называют его «целочисленным типом», и существует общая точка зрения, когда программисты полагают, что char = byte. Ну, это само по себе отражает эволюцию термина "байт".