Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;随机字符串返回意外的结果_C++_C_Arrays_Char - Fatal编程技术网

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您的意思是什么@Mat
chars[len]={0}
怎么会越界?我想这就是你应该如何把一个边注的可重复的副本,这将是更准确地标记C比C++ +。@ EpCHIBES是的,通过缓冲区和它的长度(A代码> SigZeT<<代码>理想)作为输入参数,并让函数排序,包括设置终止空(你没有忘记,对不对?).最后记得删除它,别忘了
+       rand    0x002df990 "XnQWpÌÌÌÌÌÌÌÌÌÌÌ\x5"    char *