C++ 如何在不同位置用新字符串填充静态字符串数组?

C++ How to populate a static array of strings with new strings in different locations?

说我明白了

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

我试过了

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

但是它崩溃了

如何不断更改它们而不弄乱其他元素中的字符串。

我不想使用 std::string 或 vector 那些会导致疯狂缓慢的编译时间。

因为你试图复制成文字字符串 ("Northeast Asia")。

在 C++ 中,文字字符串实际上是一个 常量 字符数组,任何修改此类数组的尝试都将导致 未定义的行为(有时会表现为崩溃)。

如果你想MapIds[0]指向一个新字符串,那么你只需使用赋值:

MapIds[0] = "gfggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg";

因为文字字符串是常量字符数组,C++ 不允许您使用 char* 指向它们,您必须使用 const char*:

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

但是,更好的解决方案是根本不使用 C 风格的字符串和 char 指针(const 或不使用),而只使用 std::string:

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

然后您可以修改数组本身中的字符串,使用如上所示的简单赋值。