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
时,您才会注意到编译它所花费的额外时间。
我有一个静态数组,我只需要更新某些区域。
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
时,您才会注意到编译它所花费的额外时间。