Générateur de code aléatoire.
Fermé
Aiden Pearce
Messages postés
48
Date d'inscription
dimanche 22 septembre 2013
Statut
Membre
Dernière intervention
25 septembre 2013
-
22 sept. 2013 à 00:45
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 27 sept. 2013 à 10:30
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 27 sept. 2013 à 10:30
A voir également:
- Générateur de code aléatoire.
- Code ascii de a - Guide
- Generateur de mot de passe - Télécharger - Sécurité
- Code puk bloqué - Guide
- Code de déverrouillage oublié - Guide
- Code activation windows 10 - Guide
2 réponses
Chris 94
Messages postés
50978
Date d'inscription
mardi 8 janvier 2008
Statut
Modérateur
Dernière intervention
17 février 2023
7 336
25 sept. 2013 à 17:26
25 sept. 2013 à 17:26
Salut,
Hum !
Il y a comme un relent d'exercice, de devoir... Sinon, effectivement, on pense :-/
Hum !
Il y a comme un relent d'exercice, de devoir... Sinon, effectivement, on pense :-/
juliencolin54
Messages postés
217
Date d'inscription
dimanche 22 juillet 2012
Statut
Membre
Dernière intervention
1 octobre 2013
55
26 sept. 2013 à 08:51
26 sept. 2013 à 08:51
Bonjour,
Voici pour toi, j'ai commenté pour que tu comprennes mieux.
Cdlt,
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,
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié par [Dal] le 26/09/2013 à 16:10
Modifié par [Dal] le 26/09/2013 à 16:10
Salut Julien,
C'est malin de procéder comme cela.
Deux remarques :
Il faut terminer la chaîne après la boucle for, avec
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
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
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
26 sept. 2013 à 16:18
26 sept. 2013 à 16:18
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.
juliencolin54
Messages postés
217
Date d'inscription
dimanche 22 juillet 2012
Statut
Membre
Dernière intervention
1 octobre 2013
55
26 sept. 2013 à 16:49
26 sept. 2013 à 16:49
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 ?)
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 ?)
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
26 sept. 2013 à 17:28
26 sept. 2013 à 17:28
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 là), 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
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 là), 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
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
Modifié par fiddy le 26/09/2013 à 23:08
Modifié par fiddy le 26/09/2013 à 23:08
@Julien,
Pour gagner encore 2 caractères : return 0; au lieu de return (0); Eh oui, return n'est pas une fonction :-)
Pour gagner encore 2 caractères : return 0; au lieu de return (0); Eh oui, return n'est pas une fonction :-)