C++ 如何使用 c_str() 在旧值之上使用新值填充 char* 字符串数组

C++ How to fill a char* array of strings with new values using c_str() on top of old ones

我有一个静态数组,我只需要更新某些区域。

char* MapIds[5000] = { "Northeast Asia","Hanyang","Pusan","Pyongyang","Shanghai","Beijing","Hong Kong" /* 4999 more stuff */ };

我有一个 mapName,它是一个 JSON 对象,它可以提供一个字符串,我使用 c_str();

将其转换为 char*

即使 JSON 加载函数退出,我也希望能够使用这些字符串,这就是为什么我尝试将字符串复制到字符串文字数组中的原因。也不要触及我不必用新字符串替换的其他字符串索引。但他们都崩溃或给出空字符串。

我尽量远离 std::string 而是使用 char*,因为 std::string 对于巨大的初始化列表来说很慢

            int size = strlen(mapName.ToString().c_str());
            char* str = new char[size + 1];
            str[size] = '[=12=]';
            //std::copy(mapName.ToString().c_str(), mapName.ToString().c_str() + size, MapIds[std::stoi(mapId.ToString().c_str())]); //fails
            //strcpy(MapIds[std::stoi(mapId.ToString().c_str())], mapName.ToString().c_str()); //fails
            //MapIds[std::stoi(mapId.ToString().c_str())] = mapName.ToString().c_str(); //fails
            //sprintf(MapIds[std::stoi(mapId.ToString().c_str())], "%s", mapName.ToString().c_str()); //fails
            MapIds[0] = "gfggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg"; //this good

            printf("map0 = %s, map1 = %s, map2 = %s\n", MapIds[0], MapIds[1], MapIds[2]);

I try to copy the string into the array of string literals

你试图做的是不合法的 C++。 char* MapIds[5000] = ... 应该是 const char* MapIds[5000] = ... 并且试图覆盖该数组中的任何内容会使您的程序具有未定义的行为。

I try to stay away from std::string and instead use char*'s because std::string is slow [to compile] with huge initialized list

制作一个 std::vector<std::string>(或 std::array),您将其单独放入一个 .cpp 文件中,并制作一个带有 extern 声明的 header。只有当您需要更新 vector 时,您才会注意到编译它所花费的额外时间。