繁体   English   中英

创建动态分配的指针数组 C++

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM