Массив указателей на строку
Указатели сами по себе представляют значения, которые можно хранить в массивах. То есть в итоге получится массив указателей.
#include <
stdio.h>
#include <
stdlib.h>
#include <
string.h>
int main(void)
{
/* Статический массив указателей на строку */
const short SIZE = 5;
const char *const_str = "Hello world!";
char *str_static[SIZE];
for (size_t i = 0; i <
SIZE; i++)
{
/* Выделяем память для сторки и присваиваем значение в указатель */
str_static[i] = (char*)calloc(32, sizeof(char));
strcpy_s(str_static[i], strlen(const_str) + 1, const_str);
}
for (size_t i = 0; i <
SIZE; i++)
{
printf("%s\n", str_static[i]);
/* Очищаем выделенную для строки память */
free(str_static[i]);
}
printf("------------\n");
/* Динамический массив указателей на строку */
char **str_dynamic = nullptr;
/* Выделяем память для массива указателей */
str_dynamic = (char**)calloc(SIZE, sizeof(char*));
for (size_t i = 0; i <
SIZE; i++)
{
/* Выделяем память для сторки и присваиваем значение в указатель */
str_dynamic[i] = (char*)calloc(32, sizeof(char));
strcpy_s(str_dynamic[i], strlen(const_str) + 1, const_str);
}
for (size_t i = 0; i <
SIZE; i++)
{
printf("%s\n", str_dynamic[i]);
/* Очищаем выделенную для строки память */
free(str_dynamic[i]);
}
/* Очищаем массив указателей */
free(str_dynamic);
return 0;
}