我正在学习有关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>
,但仍然遇到分段错误。
编辑:人们告诉我,我需要为每个指针分配一个有意义的地址。有没有一种方法可以给我分配的每个地址分配一个地址,然后再开始写地址?我了解我可能正在写边界,但是如果它不会崩溃,那很好,因为这只是针对不同概念的学习练习。
答案 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
中的指针均未分配任何内存-您正在写入内存中的某个随机位置(未定义的行为)。