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