[英]How to initialize 2D array of chars
我試圖編寫一個簡單的名稱生成器,但是我陷入了數組初始化的困境。
為什么不能像這樣初始化2D數組?
const char* alphab[2][26] ={{"ABCDEFGHIJKLMNOPQRSTUVWXYZ"}, {"abcdefghijklmnopqrstuvwxyz"}};
它編譯時沒有錯誤和警告,但是cout << alphab[0][5]
打印任何內容。
為什么這樣
class Sample{ private: char alphnum[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; }
拋出“字符數組的初始化字符串太長”錯誤,並且此
char alphnum[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
class Sample{
//code
};
不是嗎
這是我的代碼
class NameGen {
private:
string str;
char arr[5];
const char* alphab[2][26] = {{"ABCDEFGHIJKLMNOPQRSTUVWXYZ"},
{"abcdefghijklmnopqrstuvwxyz"}
};
public:
string genName()
{
srand(time(0));
for (unsigned int i = 0; i < sizeof(arr); ++i) {
arr[i] = *alphab[(i > 0) ? 1 : 0][rand() % 25];
}
str = arr;
return str;
}
} alph;
int main()
{
cout << alph.genName() << endl;
return 0;
}
沒有警告和錯誤。 輸出為:分段錯誤(代碼已轉儲)
答案為1。
const char* alphab[2][26] ={{"ABCDEFGHIJKLMNOPQRSTUVWXYZ"},
{"abcdefghijklmnopqrstuvwxyz"}};
應該
const char* alphab[2] ={{"ABCDEFGHIJKLMNOPQRSTUVWXYZ"},
{"abcdefghijklmnopqrstuvwxyz"}};
因為您沒有2D的指針到字符數組,而只有1D的指針到字符數組。 線
arr[i] = *alphab[(i>0) ? 1: 0][rand() % 25];
然后應更改為
arr[i] = alphab[(i>0) ? 1: 0][rand() % 25];
這里的例子。
答案為2。
計算字符數,並為\\0
字符添加一個額外的字符。 您不能將大小為零的數組作為成員變量,因此必須指定長度,例如
char alphnum[5] = "test";
試試這個:
char alphab[2][27] = {
{"abcdefghijklmnopqrstuvwxyz"},
{"ABCDEFGHIJKLMNOPQRSTUVWXYZ"}
};
注意使用char和char *。 char *可以自己創建一個char數組! 為\\ n保留一個額外的單位。
現在,您可以輕松引用alphab。
Cout<< alphab[1][5] ; //you will get 'F'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.