我面临着使这段代码工作的问题:
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方法需要删除单个指针,然后删除指针数组。