将二维 Char[][] 数组的特定范围复制到 char * 或 std::string

Copy specific range of 2 Dimensional Char[][] Array to char * or std::string

假设您阅读了标题,这里有一个伪代码的小例子:

char inputChar[5][20];
{put data in array obviously}
char * outputChar;
copy(inputChar[2][7], inputChar[2][18], outputChar);
printf("%s", outputChar);

或可选(虽然我更喜欢上面的版本):

char inputChar[5][20];
{put data in array obviously}
std::string outputString;
copy(inputChar[2][7], inputChar[2][18], outputString);
cout outputString; //I don't know how to use std::strings with printf

我试过 std::copy 和 memcpy 但我无法让它工作。结果要么给我不属于字符串的随机字符,要么由于我不完全理解语法而导致编译器错误。

编辑: 这是我正在使用的实际代码: (假设此示例已为 storeMenu 分配了数据)

int line = 0
int frame5 = 11;
char storeMenu[9][13];
char * temp1 = new char[12];
char * temp2 = new char[12];
std::copy(&storeMenu[line+1][0], &storeMenu[line+1][frame5-10], temp1);
std::copy(&storeMenu[line][frame5-10], &storeMenu[line][12], temp2);

要使用std::copy,您需要一个指向字符位置的指针,您正在将字符本身传递到这里。您还需要初始化 outputChar.

char inputChar[5][20] = {"abc","def","ghi01234567890","jkl"};
char * outputChar = new char[20];
auto last = copy(&inputChar[2][0], &inputChar[2][5], outputChar);
*last = '[=10=]';
printf("%s\n", outputChar);

或者使用 std::string:

char inputChar[5][20] = {"abc","def","ghi01234567890","jkl"};
string outputChar;
copy(&inputChar[2][0], &inputChar[2][5], back_inserter(outputChar));
printf("%s\n", outputChar.c_str());

也将输入用作 std::string

string inputChar[5] = {"abc","def","ghi01234567890","jkl"};
int fromChar = 2; // from (inclusive) ^  ^  
int toChar = 5; // to (exclusive)        ^   
string outputChar;
copy(inputChar[2].begin()+fromChar, inputChar[2].begin()+toChar, back_inserter(outputChar));
printf("%s\n", outputChar.c_str());
cout << outputChar << endl;