从 1 中创建新的字符 * 作为参数,元素位于 2 个索引之间

Make new char * from 1 given as argument with elements between 2 indexes

本文关键字:元素 之间 索引 参数 创建 字符      更新时间:2023-10-16

我正在尝试编写一个函数,以从另一个作为参数给出的字符数组创建一个新的 char 数组,元素位于 2 个指定索引之间。

char * split(char * array, int i, int j){
    int x = 0;
    char * newArray;
    for (int m = i; m < j; m++){
        newArray[x] = array[m];
        x++;
    }
    return newArray;
}

例如:

char * s = "helloworld";
char * first = split(s, 0, 5); // 'hello'
char * second = split(s, 5, 10); // 'world'

但是由于某种原因,在我尝试在函数调用后访问"第一个"或"第二个"的任何元素后,它一直给我分段错误。

您从未为char * newArray分配实际内存(甚至将其初始化为 NULL 等(,因此它是一个指向未分配内存的垃圾地址。

第一次执行newArray[x] = array[m];调用未定义的行为时; newArray指向???newArray[x]指向"x 个字节超过 ???",这仍然是???.您需要自己分配内存并将指向它的指针存储在newArray中(为 NUL 终止符分配一个额外的字节(,通过复制来初始化它(并确保在末尾为 C 样式字符串设置一个 NUL 字节(,然后返回它。

请注意,鉴于您使用的是C++,您实际上应该只使用std::string及其substr方法,从而省去很多麻烦。