Краткий ответ: компилятор переменного тока запекает константы в двоичный файл, поэтому вам нужно использовать strncpy (или strcpy , если вы не беспокоитесь о безопасности) для копирования "{kernel} "в info[i].name
.
Более длинный ответ: Всякий раз, когда вы пишете
char label[] = "Single";
, компилятор C запечет строку« Single »в двоичный файл, который он создает, и сделает label
в указатель на эту строку.В терминах языка C «Single» относится к типу const char *
и поэтому не может быть изменен каким-либо образом.Однако вы не можете присвоить const char *
для char *
, так как char *
можно изменить.
Другими словами, вы не можете написать
char label[] = "Single";
label[0] = "T";
, потому что компилятор не разрешит вторую строку.Тем не менее, вы можете изменить info[i].name
, написав что-то вроде
info[i].name[0] = '[';
, потому что info[i].name
, если типа char *
.Чтобы решить эту проблему, вы должны использовать strncpy
(я ссылался на страницу руководства выше), чтобы скопировать строку "{Kernel}" в info[i].name
как
strncpy(info[i].name, "{Kernel}", 256);
info[i].name[255] = '\0';
, что гарантирует, что вы этого не сделаетепереполнить буфер.