我正在用C语言编写一个程序,生成多个由随机字符组成的字符串,每个字符串的大小基本上是固定的,设置为8个字符,字符串的每个索引都输入一个随机字符,考虑到最后一个索引是空终止字符。
但是,每当我打印字符串时,就会得到2个额外的字符添加到字符串中,并且strlen()
函数返回的长度为10,而不是8。
输出如下所示:
代码是这样的:
char password[9];
for(int cnt = 0; cnt < n; cnt++){
for(int i = 0; i < 8; i++){
if (i < 3){
password[i] = rand() % 26 + 65;
} else if (i < 6){
password[i] = rand() % 26 + 97;
} else if (i >= 6){
password[i] = rand() % 10 + 48;
}
}
printf("%s\n", password);
printf("%d\n", strlen(password));
我试着做了一个随机字符串生成器,我希望字符串的大小和我设置的一样。
2条答案
按热度按时间0qx6xfy61#
char password[9];
声明了一个数组,它提供了9个字符的数据,但是它没有将它们初始化为任何值(除非它是一个static
或全局变量);它得到了它所占用内存中的垃圾,你填入了8个字符,第9个字符没有初始化,当作为一个C风格的字符串处理时,如果这些字符都不是NULL,你就把数组的末尾读到相邻的内存中,一直读下去,直到它碰巧碰到一个NULL(并决定它已经完成了),或者到达不可读的内存(并崩溃)。要确保在将其视为C样式字符串之前正确以NUL结尾,请执行以下操作之一:
char password[9] = {0};
password[8] = '\0';
jfgube3f2#
添加终止
'\0'
字符: