如何迭代 cpp 中的函数返回的字符指针数组

Jua*_*tiz -1 c++ arrays pointers

我创建了一个函数,该函数从 az 的随机字符创建一个 28 数组。当我尝试遍历指针数组时,main我得到了错误的值。

我缺少什么?

我知道数组是通过引用传递给函数的,是否也通过引用返回?

#include <iostream>
#include <ctime>
#define MAX 28

// Generate random char array with a-z values
char* generateRandomString(int length) {
    char random[length];
    for (int i = 0; i < length; i++) {
        // Minimun a ascii = 97
        // Maximun z ascii = 122
        srand(int(time(NULL))); // Timestamp seed generator
        int randomInt = 97 + (rand() % 25);
        char randomChar = randomInt;
        random[i] = randomChar;
    }
    return random;
}

int main() {
    char* random = generateRandomString(MAX);

    for (int i = 0; i < MAX; i++) {
        std::cout << random[i] << std::endl; // (*random)[i] Does not work neither
    }

    return 0;
}

Run Code Online (Sandbox Code Playgroud)

Rem*_*eau 5

您正在返回一个指向局部变量的指针,该指针在调用者可以使用它之前超出范围。换用就好了std::string

并且不要srand()多次调用,只调用一次。1

1:更好的是,根本不要使用,而是使用库中srand()的 C++ 随机数生成器。<random>

#include <iostream>
#include <string>
#include <ctime>
#define MAX 28

// Generate random char array with a-z values
std::string generateRandomString(int length) {
    std::string random;
    random.resize(length);
    for (int i = 0; i < length; i++) {
        // Minimun a ascii = 97
        // Maximun z ascii = 122
        int randomInt = 97 + (rand() % 25);
        char randomChar = randomInt;
        random[i] = randomChar;
    }
    return random;
}

int main() {
    srand(int(time(NULL))); // Timestamp seed generator

    std::string random = generateRandomString(MAX);

    for (int i = 0; i < MAX; i++) {
        std::cout << random[i] << std::endl; // (*random)[i] Does not work neither
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)