C++ char和rand函数类型的数组

C++ char和rand函数类型的数组,c++,arrays,C++,Arrays,我不能正确地表达这个问题,但问题是:我想创建一个随机密码,该密码包含特殊字符、字母和数字 因此,我决定了ASCII范围并将它们分配给密码数组 一切正常,但当我把它打印到控制台时,会弹出一些不在范围内的奇怪字符 这是导致问题的代码,但当我将最后一个元素赋值为null值时,它工作正常。 这是因为创建c类型字符串时,最后一个索引应始终为空吗?字符串必须以字符串终止符结束,否则它不是字符串。如果省略终止符,则无法知道字符串的长度。有人可能会假设,由于密码是const char[15],因此可以推断出大小

我不能正确地表达这个问题,但问题是:我想创建一个随机密码,该密码包含特殊字符、字母和数字 因此,我决定了ASCII范围并将它们分配给密码数组 一切正常,但当我把它打印到控制台时,会弹出一些不在范围内的奇怪字符

这是导致问题的代码,但当我将最后一个元素赋值为null值时,它工作正常。
这是因为创建c类型字符串时,最后一个索引应始终为空吗?

字符串必须以字符串终止符结束,否则它不是字符串。如果省略终止符,则无法知道字符串的长度。有人可能会假设,由于密码是const char[15],因此可以推断出大小,但实际上,几乎所有使用字符串的操作都会将其视为指针并进行迭代,直到找到空终止符。由于您没有缓冲区,它们将迭代超过缓冲区的末尾,从而导致未定义的行为。考虑使用STD::String来避免这些担忧。请参阅。

密码[i-1]='\0';在for循环之后也是这样,这与14相同@Françoisandrieux这个问题或多或少是我自己的问题,我不想在真实的单词场景中使用它。@Ðаn…但当我将最后一个元素赋值为空值时,它会正常工作。你没有从中得出结论。我想知道所有其他字符的来源,我定义了一个15的数组大小,但是屏幕上有20个或更多的字符。我从中得出了一个结论,希望得到一个准确的答案。谢谢@这就是我要找的!谢谢你,你能回答一下吗@弗朗索瓦·桑德里奥
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;
}