strcpy函数,带有动态分配的char数组



我面临着使这段代码工作的问题:

char **createCharArray() {
char **charArray = new char*[PARAM_COUNT];
for (int i = 0; i < PARAM_COUNT; ++i) {
charArray[i] = new char[MAXSIZE];
}
return charArray;
}

void deleteCharArray(char **charArray) {
for (int i = 0; i < PARAM_COUNT; ++i) {
delete[] charArray[i];
}
delete[] charArray;
}    
int main(){
char ** test = createCharArray(); 
char *asd = new char[MAXSIZE];
cin >> asd;
for (int i = 0; i < PARAM_COUNT; ++i) {
strcpy_s(test[i], asd);
}
for (int i = 0; i < PARAM_COUNT; ++i) {
cout << i << " " << test[i] << endl;
}
deleteCharArray(test);
return 0;
}

如何将该字符串复制到char数组中,我在哪里搞错了?

编辑:正如Igor Tandetnik和user17732522在评论中以及Joseph Larson在下面的回复中所回答的那样,这是通过向strcpy_s函数添加缓冲区参数来解决的,使其总共有3个参数。

有一些事情我觉得很麻烦。首先,您看到有人说应该使用std::string而不是char数组,这是真的。但是新程序员应该理解整个语言,因此理解如何使用char数组是有价值的。

因此,让我们忽略C++字符串,看看您的代码:

char ** test = createCharArray(); // array of pointers to char arrays
char *asd = new char[MAXSIZE];
cin >> asd;
for (int i = 0; i < PARAM_COUNT; ++i) {
strcpy_s(test[i], asd);
}
for (int i = 0; i < PARAM_COUNT; ++i) {
cout << i << " " << test[i] << endl;
}
deleteCharArray(test);
return 0;

让我们从这个开始。我们不知道createCharArray()做什么。它做了它应该做的一切吗?它不仅应该创建一个字符指针数组,而且你使用它的方式,它还需要创建它们各自指向的缓冲区

char ** createCharArray() {
char ** array = new char *[PARAM_COUNT];
for (int index = 0; index < PARAM_COUNT; ++index) {
array[index] = new char[MAXSIZE];
}
return array;
}

如果你的外表明显不同,你可能会有问题。

之后,让我们看看这个:

for (int i = 0; i < PARAM_COUNT; ++i) {
strcpy_s(test[i], asd);
}

正如其他人所说,这个版本的strcpy_s有三个参数:strcpy_s(test[i],asd,MAXSIZE(;

请注意,您要多次将同一个字符串复制到适当的位置。我想知道你的代码是否真的应该这样做:

for (int i = 0; i < PARAM_COUNT; ++i) {
cin >> asd;
strcpy_s(test[i], asd, MAXSIZE);
}

最后,delete方法需要删除单个指针,然后删除指针数组。

最新更新