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)
您正在返回一个指向局部变量的指针,该指针在调用者可以使用它之前超出范围。换用就好了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)