[英]Create Dynamically Allocated Array of Pointers C++
我目前正在尝试动态分配字符数组 arrays 并将另一个字符数组 arrays 的值设置为新的动态数组。 当我打印动态数组中的值时,我得到了一些垃圾值,但我无法理解它们的来源。
Class -
class Class {
private:
char** courses;
int numberOfCourses;
public:
Class();
Class(const char** courses, int numberOfCourses);
~Class();
char** getCoursesList();
int getNumberOfCourses();
};
构造函数(分配内存)-
Class:: Class(const char **courses, int numberOfCourses) {
if (numberOfCourses <= 0){
this->numberOfCourses = 0;
this->courses = nullptr;
} else{
this->numberOfCourses = numberOfCourses;
this->courses = new char*[numberOfCourses];
for (int i = 0; i < numberOfCourses; i++) {
cout << strlen(courses[i]) << endl; // 5
this->courses[i] = new char[strlen(courses[i])];
cout << strlen(this->courses[i]) << endl; // 22
strncpy(this->courses[i], courses[i], strlen(courses[i]));
}
}
}
getNumberOfCourses -
int Class::getNumberOfCourses() {
return this->numberOfCourses;
}
获取课程列表 -
char **Class::getCoursesList() {
return this->courses;
}
主要的 -
const char *courses[] = {"test1", "test2", "test3" };
Class d1(courses,3);
for (int i = 0; i < d1.getNumberOfCourses(); i++) {
cout << d1.getCoursesList()[i] << endl;
}
Output -
[test1═²²²²▌▌▌▌▌▌l┴╓K▌] [test2═²²²²▌▌▌▌▌▌@┴2K▌] [test3═²²²²▌▌▌▌▌▌Y┴;K▌]
我很想了解我做错了什么。
看看这里,您可能会从文档中了解到,strlen function 不计算字符串末尾的\0
字符。 因此它不会与 strcpy function 调用一起复制,并且 cout 不会遇到\0
。 这就是终端output出现乱码的原因。分配课程名称memory时,多分配一个字符,在字符数组末尾加上\0
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.