Массив print_names
имеет 2 измерения:
- количество элементов определяется из инициализатора: 5 в вашем примере
- количество
char
элементов в каждом элемент в массиве определен как 10
.
Проблема в том, что 5 инициализаторов имеют ровно 10 символов, а один - 11 символов. Инициализатор несовместим с определением объекта, и ни один из элементов не является строкой с нулевым символом в конце.
Вы должны изменить ширину как минимум до 12, и вы можете использовать printf()
для печати элементов массива следующим образом:
#include <stdio.h>
void print_array() {
char print_names[][12] = {
"\t\t1. John\n",
"\t\t2. Smith\n",
"\t\t3. Jane\n",
"\t\t4. Mary\n",
"\t\t5. Lisa\n"
};
size_t count = sizeof(print_names) / sizeof(print_names[0]);
for (size_t i = 0; i < count; i++) {
printf("%s", print_names[i]);
}
}
Относительно вашего подхода:
Насколько я знаю, имя массива - это сам указатель.
Не совсем: имя массива просто так. Когда вы используете имя массива в выражении, отличном от sizeof(n)
, оно распадается в указатель на первый элемент массива.
В строках ниже выводится первый байт первая и вторая строки:
printf("%c", *print_names[0]); // same as print_names[0][0]
printf("%c", *print_names[1]); // same as print_names[1][0]