我无法正确地说出这个问题,但在这里:我想创建一个随机password
,并且该密码包含特殊字符,字母和数字
所以我决定了ASCII范围并将它们分配给密码数组
一切正常,但当我把它打印到控制台时,会弹出不在范围内的奇怪字符。
int main(){
srand(time(nullptr));
char password[15];
int i = 0;
for (i = 0; i < 15; i++)
{
password[i] = (rand() % 89) + 33;
}
cout << password << endl;
return 0;
}
这是导致问题的代码,但是当我将最后一个元素指定为空值时,它可以正常工作 是因为当你创建一个c类型的字符串时,最后一个索引应该总是为空?
答案 0 :(得分:2)
字符串必须以字符串终止符结束,否则它不是字符串。如果省略终止符,则无法知道字符串的长度。有人可能会认为,因为password
是const char[15]
,可以推导出大小,但实际上,几乎所有与字符串一起使用的东西都会将其视为指针并迭代直到找到空终止符。由于您没有,它们将遍历缓冲区的末尾,导致未定义的行为。考虑使用std::string
来避免这些问题。请参阅Null-terminated byte strings。