C++随机字符串返回意外结果
C++ Random String return unexpected results
我正在尝试使用一个函数来生成char[]
:
char* randString(){
const int len = 5;
char s[len] = {0};
static const char alphanum[] =
"0123456789"
"!@#$%^&*"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";
int stringLength = sizeof(alphanum) - 1;
for (int i = 0; i < len; ++i) {
s[i] = alphanum[rand() % stringLength];
}
return s;
}
结果是随机的,预期在return s
+ s 0x002df990 "XnQWp... char[5]
然而,当我看到这里的值时:
char* rand = randString();
它包含奇怪的值:
+ rand 0x002df990 "XnQWpÌÌÌÌÌÌÌÌÌÌÌx5" char *
我的回报有错吗?
您将char s[]
声明为局部变量。当函数返回时,局部变量会被销毁,因此返回指向该变量的指针会返回指向垃圾数据的指针。
通过动态分配s
修复此问题:
char* s = new char[len];
或者,您可以传递一个char*
作为参数,并将您的字符写入该数组。
只需记住在返回之前添加终止的null字符。
相关文章:
- 尝试将字符串/字符转换为整数会产生意外结果
- RapidXML - 代码创建意外结果
- 类中静态函数C++意外结果
- 指针数组中的意外结果
- 使用指针访问数组元素时出现意外结果
- 使用 sprintf 和 %g 将双精度转换为字符串的意外结果
- C++:比较运算符>和字符串文本的意外结果
- 具有意外结果的 C++ 闭包
- yaml-cpp 比较的意外结果
- 每次都出现意外结果
- 在 Qt 中解析嵌套的 JSON 时出现意外结果(数组不存在)
- 如何避免 std::abs 的意外结果?
- 使用嵌套 if 语句的意外结果
- A ^= B ^= A ^= B;C# Visual Studio 中的意外结果
- 逻辑错误,我将获得意外结果
- 在 c++ 中使用异步的意外结果
- 从函数的返回值将元素C++存储到 std::vector 中时出现意外结果
- 执行递增和递减时"cout"链接会产生意外结果
- OpenCL - 内核方法返回意外结果
- C++使用 std::get_time 解析 YYMMDD ISO 8601 日期字符串会得到意外结果