簡體   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