C++ C++;随机字符串返回意外的结果
我正在尝试使用函数生成C++ C++;随机字符串返回意外的结果,c++,c,arrays,char,C++,C,Arrays,Char,我正在尝试使用函数生成char[]: char* randString(){ const int len = 5; char s[len] = {0}; static const char alphanum[] = "0123456789" "!@#$%^&*" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz"; int s
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;
}
但是,当我看这里的值时:
char* rand = randString();
它包含奇怪的值:
+ rand 0x002df990 "XnQWpÌÌÌÌÌÌÌÌÌÌÌ\x5" char *
我在返回中是否做错了什么?您将
char s[]
声明为局部变量。当函数返回时,局部变量将被销毁,因此返回指向该变量的指针将返回指向垃圾数据的指针
通过动态分配s
来解决此问题:
char*s=新字符[len]代码>
或者您可以将char*
作为参数传递,并将您的字符写入该数组
请记住在返回之前添加终止的空字符。这是因为您返回的是本地指针。@ApproachingDarknessFish您的意思是什么@Matchars[len]={0}
怎么会越界?我想这就是你应该如何把一个边注的可重复的副本,这将是更准确地标记C比C++ +。@ EpCHIBES是的,通过缓冲区和它的长度(A代码> SigZeT<<代码>理想)作为输入参数,并让函数排序,包括设置终止空(你没有忘记,对不对?).最后记得删除它,别忘了
+ rand 0x002df990 "XnQWpÌÌÌÌÌÌÌÌÌÌÌ\x5" char *