【发布时间】:2020-11-18 22:17:44
【问题描述】:
我目前正在尝试动态分配一个字符数组数组并将另一个字符数组数组中的值设置为新的动态数组。当我打印动态数组中的值时,我得到了一些垃圾值,我无法理解它们来自哪里。
类-
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;
}
输出 -
[test1═²²²²▌▌▌▌▌▌l┴╓K▌] [test2═²²²²▌▌▌▌▌▌@┴2K▌] [test3═²²²²▌▌▌▌▌▌Y┴;K▌]
我很想知道我做错了什么。
【问题讨论】:
-
请edit 向我们展示minimal reproducible example 的问题。
Class是什么?Class::getCoursesList()做了什么并返回? -
一个提示:字符串 null-terminator 不计入
strlen函数,也不包含在您的strncpy调用中.为其分配空间,并使用strcpy。 -
@Someprogrammerdude 问题已更新
-
@SaiSreenivas 我明确调用构造函数“Class d1(courses,3);”
-
另一个提示:除非您的作业或练习要求使用
new[]和以空字符结尾的字节字符串,否则请使用std::vector和std::string。将使您作为 C++ 程序员的生活如此变得更加轻松。