随机字符串生成产生奇怪的字符
Random string generation producing weird characters
我的随机字符串生成从字符 a-z 生成一个随机字符串就很好了,但在它结束时,有一些奇怪的字符:ÌÌÌÌÌÌÌÌÌ
.此外,在奇怪的字符之后,它会再次打印a-z
。
if( m_lower.GetCheck() == 1 )
{
char pwd[] = "abcdefghijklmnopqrstuvwxyz";
char password[26];
for(int i=0; i<26; i++) {
password[i] = pwd[rand()%26];
}
OnGenerate = password;
UpdateData(FALSE);
}
上面的代码检查是否选中了复选框,然后将随机文本发送到编辑控件。这几乎可以正常工作,只是奇怪的角色,最后还有额外的a-z
。谁能指出我正确的方向?
您需要在字符串末尾附加一个空终止符。
password[sizeof(password) - 1] = ' '; //note sizeof works in this case because
//password is an array and sizeof(char)==1
(您需要将 password
的大小修改为 27,并用随机字符填充前 26 个字符)
由于这是C++而不是 C,因此您应该利用std::string
:
if( m_lower.GetCheck() == 1 )
{
char pwd[] = "abcdefghijklmnopqrstuvwxyz";
std::string password;
for(int i=0; i<26; i++) {
password.append(1, pwd[rand() % 26]);
}
OnGenerate = password.c_str();
UpdateData(FALSE);
}
从而消除了显式跟踪字符串终止符的任何需要。由于密码变量将在if
块的末尾超出范围,因此如果OnGenerate
是一个char*
,那么您最终将有一个悬空的指针。直接使用string
可确保内容保持活动状态:
if( m_lower.GetCheck() == 1 )
{
char pwd[] = "abcdefghijklmnopqrstuvwxyz";
OnGenerate.clear();
for(int i=0; i<26; i++) {
OnGenerate.append(1, pwd[rand() % 26]);
}
UpdateData(FALSE);
}
您应该将OnGenerate
声明为类型 std::string
而不是 char*
。如果需要OnGenerate.c_str()
,您可以访问char*
。
相关文章:
- 从 argv[1] 转换为字符 * 字符串后有什么问题?
- 将 NULL 与 C 的字符* 字符串一起使用
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- 无法将常量字符字符串传递给模板类
- 如何组合一个宽字符字符串,中间插入一些空字符
- 如何将二维数组类型字符(字符串)作为函数参数传递?
- 从给定索引返回子字符字符串的函数
- 字符 [](c 字符串)的初始化标准
- 如何将字符字符串用作数学运算符
- 将 Unicode 字符/字符串写入文件
- C++,字符* 字符串修改
- 如何有效地用不同的整数元素替换字符字符串的元素
- C++:如果我们在字符串中添加一些整数,为什么它会从开头删除该数量的字符?(字符串 + 整数)
- strcpy正在复制sth字符i字符串.如何解决此错误
- 在C++中将双精度转换为字符*/字符串
- C 中的宽字符字符串
- 如何提取C 中的字符/字符串之间的字符串
- 无法将字符/字符串转换为int
- 带有指针的反转字符字符串
- 反转字符串中的 n 个字符(字符串中没有空格),而不使用 c++ 中的内置函数