我试图编写一个简单的名称生成器,但是我遇到了数组初始化问题。
为什么我不能像这样初始化2D数组?
const char* alphab[2][26] ={{"ABCDEFGHIJKLMNOPQRSTUVWXYZ"},
{"abcdefghijklmnopqrstuvwxyz"}};
它编译时没有错误和警告,但cout << alphab[0][5]
没有打印任何内容。
为什么会这样
class Sample{
private:
char alphnum[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
}
为一个字符数组抛出&#34;初始化字符串太长&#34;错误,这个
char alphnum[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
class Sample{
//code
};
没有按&#39;?吨
这是我的代码
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;
}
没有警告和错误。输出为:分段错误(代码转储)
答案 0 :(得分:2)
1的答案。
const char* alphab[2][26] ={{"ABCDEFGHIJKLMNOPQRSTUVWXYZ"},
{"abcdefghijklmnopqrstuvwxyz"}};
应该是
const char* alphab[2] ={{"ABCDEFGHIJKLMNOPQRSTUVWXYZ"},
{"abcdefghijklmnopqrstuvwxyz"}};
因为你没有指向char的指针的二维数组,而只是一个指向指向字符的一维数组。这条线
arr[i] = *alphab[(i>0) ? 1: 0][rand() % 25];
然后应更改为
arr[i] = alphab[(i>0) ? 1: 0][rand() % 25];
直播示例here。
2的答案。
计算字符数并为\0
字符添加额外的字符数。您不能将零大小的数组作为成员变量,因此必须指定长度,例如
char alphnum[5] = "test";
答案 1 :(得分:0)
试试这个:
char alphab[2][27] = {
{"abcdefghijklmnopqrstuvwxyz"},
{"ABCDEFGHIJKLMNOPQRSTUVWXYZ"}
};
注意使用char和char *。 char *可以自己制作一系列字符! 为\ n。
留出一个额外的单位您现在可以轻松引用alphab。
Cout<< alphab[1][5] ; //you will get 'F'