Je crée une fonction qui crée un groupe 28 de caractères aléatoires d'A-Z.
Lorsque j'essaie d'ithéter sur le tableau de pointeur de Que je me manque? > P> Je sais Les matrices sont transmises par référence à la fonction, sont renvoyées par référence aussi? P> principal code>, je reçois les mauvaises valeurs. #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;
}
3 Réponses :
Vous retournez un pointeur sur une variable locale qui dépasse la portée avant que l'appelant puisse l'utiliser. Il suffit d'utiliser et n'appelle pas 1: encore meilleur, n'utilisez pas std :: string code> à la place. srand () code> plusieurs fois, appelez cela une seule fois. 1 sup> srand () code> du tout, utilisez un générateur de nombres aléatoires C ++ à partir du à la place. sup> p> #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;
}
Merci, je suis nouveau au CPP donc j'apprécie vraiment vos suggestions !!
std::string random = generateRandomString(MAX); ...
Popping ma tête ici pour signaler que le + 1 code> dans char * aléatoire = nouveau char [longueur + 1]; code> et le char code> pour tenir des chaînes.
La fonction generaterateromstring code> renvoie le pointeur sur le premier élément d'un tableau local. #include <iostream>
#include <cstdlib>
#include<ctime>
char * generateRandomString( size_t length )
{
char *s = new char[length + 1];
s[length] = '\0';
std::srand( ( unsigned int )std::time( nullptr ) );
for ( size_t i = 0; i < length; i++ )
{
s[i] = 'a' + std::rand() % ( 'z' - 'a' + 1 );
}
return s;
}
int main()
{
const size_t MAX = 28;
char *s = generateRandomString( MAX );
std::cout << s << '\n';
delete [] s;
}
Vous ne pouvez pas i> déclarer un tableau local et renvoyer son adresse comme celle-là. La mémoire devient invalide lorsque la fonction dépasse la portée. Vous avez (au moins) deux choix: 1) "Nouveau" Le tableau, ou 2) allouer le tampon à l'extérieur i> de la fonction et transmettez-le sous forme de paramètre.
Note latérale: Les tableaux de longueur variable ne sont pas valides C ++. Renvoie une STD: String à la place.
Votre code renvoie un pointeur par valeur.