Как лучше разместить неизменяемые данные в строке? - C (СИ)
Формулировка задачи:
Здравствуйте уважаемые программисты
Задача у меня следующая --- есть некоторая строка, которая пишется в контроллер при компиляции как константа,
также как константа пишется ее размер через функцию sizeof() вопрос вот в чем, как это лучше всего разместить
чтобы было читабельно и не громоздко? вот варианты которые я продумал, но мне они не нравятся:
1)
взять 2 переменный типа const 1 - массив, 2 - значение и инициализировать их начальными значениями
тут получается много переменных, а если много строк так и вообще запутаться можно, да и не удобно обращаться к 2
переменным
2)
взять обычный массив на 0 элемент массива писать его размер на все остальные заполнить значением строки
тут получается обычная переменная без const, но если много строк то вроде как обращаюсь к 1 элементу для каждой строки в программе
3)
использовать новый тип данных, но тут опять таки не можем использовать const, а если запишем const в новый тип непонятно как инициализировать разные строки
4)
также можно попробовать использовать 2 структуры в 1 будут храниться все строки в другой ее размеры, но тут возникает та же проблема что и в 1 пункте
5)
или вот как мне кажется наиболее неплохой способ сделать указатель область памяти так чтобы при обращении ее нельзя было возможным изменить, а при обращении к области напрямую можно было бы ее инициализировать, но это кажется и без меня делает компилятор... что - то как-то непонятно...
или может есть другие способы решения такой проблемы...
в общем не хватает опыта... может кто - то сталкивался с такой проблемой...
Решение задачи: «Как лучше разместить неизменяемые данные в строке?»
textual
Листинг программы
#include <stdio.h> #include <string.h> #define LITERAL_01 "This is a const literal number one" #define LITERAL_02 "This is a const literal number two" #define LITERAL_03 "This is a const literal number three" #define LITERAL_04 "This is a const literal number four" #define LITERAL_05 "This is a const literal number five" void PrintLiteral(const char* const literal, const size_t literalLength) { int i = 0; for(i = 0; i < literalLength; i++) { printf("%c", literal[i]); } printf("%c", '\n'); } int main(void) { char* literalsPtrArray[5]; int i = 0; literalsPtrArray[0] = LITERAL_01; literalsPtrArray[1] = LITERAL_02; literalsPtrArray[2] = LITERAL_03; literalsPtrArray[3] = LITERAL_04; literalsPtrArray[4] = LITERAL_05; /* with sizeof() */ for(i = 0; i < 5; i++) { PrintLiteral(literalsPtrArray[i], sizeof(literalsPtrArray[i])); } /* with strlen() */ for(i = 0; i < 5; i++) { PrintLiteral(literalsPtrArray[i], strlen(literalsPtrArray[i])); } return 0; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д