как установить массив символов в строку с - PullRequest
0 голосов
/ 17 февраля 2012

, поэтому у меня есть вызов структуры Process_Info

  struct Process_Info {
    char name[128];
    int pid;
    int parent_pid;
    int priority;
    int status;
      };

и массив информации о вызовах Process_Info.Я устанавливаю pid в info как целое число, оно работает, но когда я пытаюсь установить name в info как "{kernel}", как это

info[i].name="{kernel}";

, это дает мне несовместимый тип в ошибке присваивания.Я ищу в Интернете, кажется, я могу это сделать, как в http://www.cs.bu.edu/teaching/cpp/string/array-vs-ptr/, они сделали char label [] = "Single";Так что я делаю не так?

Ответы [ 2 ]

7 голосов
/ 17 февраля 2012

Краткий ответ: компилятор переменного тока запекает константы в двоичный файл, поэтому вам нужно использовать 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';

, что гарантирует, что вы этого не сделаетепереполнить буфер.

0 голосов
/ 17 февраля 2012

Я думаю, вы можете ошибаться.То, как вы могли бы назначить это, будет один символ за раз, например ...

name[] = {'a','b','c','d'};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...