Générateur de code aléatoire.

Aiden Pearce Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   -  
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   -
Salut tout le monde,
est-ce que quelqu'un pourrait me procurer un code source en langage C qui pourrait générer un code aléatoire de 8 chiffres en m'expliquant comment ça marche ?
Je sais ce que vous penserez mais c'est parce que je ne comprends rien du tout et j'ai besoin de ce code source!
Merci !
A voir également:

2 réponses

Chris 94 Messages postés 54087 Date d'inscription   Statut Modérateur Dernière intervention   7 345
 
Salut,

Hum !

Il y a comme un relent d'exercice, de devoir... Sinon, effectivement, on pense :-/
0
juliencolin54 Messages postés 217 Date d'inscription   Statut Membre Dernière intervention   55
 
Bonjour,

Voici pour toi, j'ai commenté pour que tu comprennes mieux.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

/*
** Retourne une chaîne random :
** - lenStr : taille de la chaine retournee
** - tabChars : caractères utilisé pour le random
*/
char *randomString(int lenStr, char *tabChars)
{
char *str;
int i;
int lenTabChars;

lenTabChars = strlen(tabChars);
// Malloc de la chaine de caractère (8 + 1) cases
str = malloc((lenStr + 1) * sizeof(char));
for (i = 0; i < lenStr; i++) {
str[i] = tabChars[(rand() % lenTabChars)];
/*
** Chaque case de la chaine équivaut à tabChars[NOMBRE_RANDOM % 10]
** ie une case de tabChars au hasard
}
return (str);
}

int main(int ac, char **av)
{
srand(time(0)); // Inialisation du random
printf("%s\n", randomString(8, "0123456789"));
return (0);
}


Cdlt,
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
Salut Julien,

C'est malin de procéder comme cela.

Deux remarques :

Il faut terminer la chaîne après la boucle for, avec
str[lenStr] = '\0';
, selon ma compréhension.

En C, je pense que la façon adéquate de renvoyer une chaîne avec une fonction n'est pas return, mais l'utilisation d'un chaîne passée en paramètre. Donc, ajouter un 3ème paramètre à ta fonction afin que l'espace mémoire dans lequel se trouve le résultat persiste. Là, dans ton implémentation, la mémoire pointée par str n'est allouée que pendant l'exécution de la fonction randomString. Après, tu n'as aucune garantie que cet espace mémoire ne soit pas occupé par autre chose, réclamé par un autre processus, etc. Laisse à la fonction appelante le soin d'allouer l'espace mémoire dans lequel randomString va stocker le résultat. Il sera de la responsabilité de la fonction appelante de libérer cet espace ou d'en faire ce que bon lui semble.


Dal
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
Aussi, en principe, cela devrait aussi être NULL que l'on passe à time, car la fonction attend un pointeur de type time_t. Bien sûr NULL va être substitué par 0 par le préprocesseur, mais, NULL dit mieux ce dont il s'agit : un pointeur sans cible.
0
juliencolin54 Messages postés 217 Date d'inscription   Statut Membre Dernière intervention   55
 
En effet, j'ai repris un ancien code et j'ai supprimé le '\0' final par négligence.
Pour toutes tes autres remarques, c'est vrai et mieux de faire comme tu dis.

Mais j'ai pas envie de m'embêter à poster un code "nickel" à chacun de mes post, tant que la question est bien traitée.
Par exemple je préfère mettre 0 au lieu de NULL car je gagne 3 caractères.
(Énorme économie, n'est-ce pas ?)
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
juliencolin54:

lol @ "économie"

plus sérieusement, comme une grande majorité des personnes posant des questions ici sont des gens qui se forment au langage C, et que les posts sur les forums CCM sont bien référencés par les moteurs de recherche, je crois qu'au contraire on devrait avoir le souci de poster un code aussi rigoureux et exact que possible (dès lors qu'on poste un code)

comme on n'est pas parfait, mais qu'on est une communauté, le peer-review joue aussi et permet à la fois d'améliorer la qualité des contributions et de faire progresser tout le monde, et pas seulement les personnes qui postent les questions.

Aiden Pearce:

En reprenant le code astucieux de Julien, et en y appliquant les modifications proposées ci-dessus (ici et ), cela serait bien que tu nous postes le code final en répondant à ton propre sujet.

Ainsi, on saura si tu as compris (on ne va pas tout faire pour toi tout de même), et on aura un code propre à proposer en réponse à ta question dans ce fil.


Dal
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
@Julien,

Pour gagner encore 2 caractères : return 0; au lieu de return (0); Eh oui, return n'est pas une fonction :-)
0