我正在尝试使用函数生成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 *
我在回报中做错了吗?
答案 0 :(得分:2)
您将char s[]
声明为本地变量。函数返回时会破坏局部变量,因此返回指向该变量的指针会返回指向垃圾数据的指针。
通过动态分配s
来解决此问题:
char* s = new char[len];
或者您可以传递char*
作为参数并将您的角色写入该数组。
请记住在返回之前添加终止空字符。