C ++ Как заполнить массив строк stati c новыми строками в разных местах? - PullRequest
0 голосов
/ 03 марта 2020

Скажите, что я получил это

char* MapIds[5000] = { "Northeast Asia","Hanyang","Pusan","Pyongyang","Shanghai","Beijing","Hong Kong", /*...5000 values etc../* };

Я пытался

strcpy(MapIds[0], "gfggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg");

Но это дает сбой

Как мне изменить их, не перепутав строки в других elements.

Я не хочу использовать std :: string или vector, которые вызывают сумасшедшие медленные времена компиляции.

1 Ответ

5 голосов
/ 03 марта 2020

Поскольку вы пытаетесь скопировать в буквальную строку ("Northeast Asia").

В C ++ буквальная строка действительно является константой массивом символов, любой попытка изменить такой массив приведет к неопределенному поведению (которое иногда может express привести к аварийному завершению).

Если вы хотите MapIds[0] указать для новой строки вы просто используете присваивание:

MapIds[0] = "gfggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg";

Поскольку буквенные строки являются константными массивами символов, C ++ на самом деле не позволяет иметь char* для указания на них, вы должны использовать const char*:

const char* MapIds[] = { ... };

Однако гораздо лучшим решением будет не использовать строки типа C и указатели char (const или нет) вообще, а только использовать std::string:

std::string MapIds[] = { ... };

Затем вы можете изменить строки в самом массиве, используя простое присваивание, как показано выше.

...