Как лучше разместить неизменяемые данные в строке? - 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;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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