Вы пытаетесь инициализировать массив символов с помощью NULL
. Это не имеет никакого смысла. Например, вы получите то же предупреждение от
char a[100] = { NULL };
и это не имеет смысла точно так же.
"Целое число", упомянутое в диагностическом сообщении, является первым элементом массива символов. char
- это целочисленный тип в C, и когда вы пишете
char a[100] = { NULL };
это попытка инициализировать 0-й элемент массива a
с помощью NULL
. На вашей платформе NULL
объявляется как нечто с типом указателя, поэтому диагностическое сообщение говорит, что вы пытаетесь сделать целое число (a[0]
) из указателя (NULL
) без приведения.
Еще более простой пример может выглядеть следующим образом
char c = NULL;
и по тем же причинам вам выдаст такое же диагностическое сообщение.
Могу я спросить, почему вы пытаетесь инициализировать char
с NULL
? Каково было ваше намерение?
Если вы не собираетесь записывать в массивы name
и position
после инициализации, возможно, вам следует использовать указатели вместо массивов, как в
struct company_prof
{
const char *name;
size_t age;
const char *position;
} employee[] = {
{ "Job Bloggs", 23, "software engineer" },
{ "Lisa Low" , 34, "Telecomms Technician" },
{ "simon smith", 38, "personal assistist" },
{ NULL , -1, NULL }
};
Формально, в этом случае NULL
имеет смысл. Но не в случае массива.
Но менее формально цель этой записи { NULL, -1, NULL }
в конце массива мне не ясна. Является ли какой-нибудь завершающий элемент? Почему бы вам просто не использовать точный размер массива вместо создания завершающего элемента?