C ++ char *复制问题数组

时间:2018-11-29 21:41:43

标签: c++ arrays pointers

我正在学习有关C ++中的指针的知识。我们使用char*而不是vector<string>的数组来了解其工作原理。我正在尝试创建一个长度为3的char*数组,并像这样从const char*数组中复制字符串:

const char* strings[] = { "Red", "Blue", "pink"};
char* new_array[3];
strcpy(new_array[0], strings[0]);

我已包含标头<string.h>,但仍然遇到分段错误。

编辑:人们告诉我,我需要为每个指针分配一个有意义的地址。有没有一种方法可以给我分配的每个地址分配一个地址,然后再开始写地址?我了解我可能正在写边界,但是如果它不会崩溃,那很好,因为这只是针对不同概念的学习练习。

3 个答案:

答案 0 :(得分:3)

目标数组中的所有指针都没有指向已分配的内存。您需要先为字符串分配内存,然后才能strcpy()放入字符串,例如:

const char* strings[] = { "Red", "Blue", "pink"};
char* new_array[3];

for(int i = 0; i < 3; ++i)
{
    new_array[i] = new char[strlen(strings[i])+1];
    strcpy(new_array[i], strings[i]);
}

...

for(int i = 0; i < 3; ++i)
{
    delete[] new_array[i];
}

或者:

const char* strings[] = { "Red", "Blue", "pink"};
char* new_array[3];

for(int i = 0; i < 3; ++i)
{
    new_array[i] = strdup(strings[i]);
}

...

for(int i = 0; i < 3; ++i)
{
    free(new_array[i]);
}

答案 1 :(得分:2)

对于数组new_array中的每个字符串,您需要为该字符串分配内存。现在,这三个指针中的每一个都未初始化,因此您会得到未定义的行为。

答案 2 :(得分:2)

new_array中的指针均未分配任何内存-您正在写入内存中的某个随机位置(未定义的行为)。