remise a zero d'un tableau ? - C - Programmation
Marsh Posté le 30-12-2004 à 18:49:57
Daniel59 a écrit :
|
La boucle est une solution, sinon memset() fonctionne aussi.
Marsh Posté le 30-12-2004 à 19:01:57
Ou bzero(), au choix. La boucle est une moins bonne solution.
Edit : j'avais jamais remarque mais comme l'a dit Emmanuel bzero n'est pas standard, et en plus c'est deprecie. Donc memset().
Marsh Posté le 30-12-2004 à 19:09:26
G opté pour le memset:
memset(tab2, '\0', strlen(tab2) - 1);
memset(tab3, '\0', strlen(tab3) - 1);
seul bleme, si le tableau est deja a zero ça plante, je l'é mi en fin de mon while avec une condition!
matafan keske le bzero(), c'est une fonction ke je doi creer tu ve dire? parce que yé pas dans mon index.
Marsh Posté le 30-12-2004 à 19:17:04
Bon alors plusieurs remarques la :
1) memset prend un int, pas un char. Donc met simplement 0 au lieu de '\0'
2) Si ton tab2[0] == 0 alors strlen te renvoit 0. Et passer -1 a memset, ca lui fait mettre a 0 les 4294967295 octets qui suivent tab2.
3) J'ai l'impression que tu traites tes tableau comme des chaines. Si c'est le cas et si tu veux simplement mettre une chaine vide dans ton tableau, pas besoin de memset ou bzero : tab2[0] = '\0' suffit.
PS : bzero c'est un fonction de la libc tout comme memset, et elle est declaree dans strings.h tout comme memset.
Marsh Posté le 30-12-2004 à 19:24:24
matafan a écrit : Ou bzero(), au choix. La boucle est une moins bonne solution. |
bzero() n'est pas standard.
Marsh Posté le 30-12-2004 à 19:28:32
Daniel59 a écrit : G opté pour le memset:
|
Non!
|
Mais si ces tableaux sont utilisés dans le contexte 'chaine de caractères', la méthode simple et rapide de créer une chaine vide est
|
Marsh Posté le 30-12-2004 à 19:32:21
matafan a écrit : |
C'est pareil. Un caractère littéral est un int en C.
Marsh Posté le 30-12-2004 à 20:11:44
Bon, euh bah
tab2[0] = '\0'; ou *tab2 = 0; ça marche po
soit mon prog plante, soit c mon editeur ki se fé totalment jette par XP, lol!
un pe d'aide sur la fonction de mon prog vous aidera surement:
http://www.chez.com/pyro2000/help/mdp.txt
Marsh Posté le 30-12-2004 à 20:39:53
Daniel59 a écrit : Bon, euh bah |
Citation : |
Trou de sécurité (pour un login/mdp, c'est intéressant...)
Pour saisir une ligne, il vaut mieux utiliser fgets(). Détails ici:
http://mapage.noos.fr/emdel/notes.htm#saisie
Citation : |
Pourquoi "a+" et non "a" ? C'est un truc à casser un fichier...
Le reste parait extrèmement complexe pour une simple vérification de login/mot de passe...
Dans le fichier :
login<espace>mot-de-passe
Lire ce fichier :
fgets()
sscanf() avec "%s %s""
comparaison : strcmp() dès qu'on a le login, on vérifie le mdp...
rien de compliqué.
Marsh Posté le 30-12-2004 à 20:56:27
Arf, justement c plu compliké ke ça, et je ve bien suivre le cahier des charges.
Le fichier texte se compose ainsi:
nom,mdp,etat(utilisateur ou superutilisateur)
la fonction compare donc nom et mot de passe et aprés retournera 1 si c un utilisateur et 2 si c un superutilisateur, mais ça g pas encore fé!
et il est vrai ke l'histoire de virgule pe etre dur a comprendre mais ça marche!
sinon pour remettre les tablo a zero je reste sur mes memset de départ qui fonctionne bien
Marsh Posté le 30-12-2004 à 22:07:03
Bon il n'y a plu de rapport avec le sujet, mais bon maintenant ke t'a vu ma fonction
Je ve utilisé un feof pour detecter la fin du fichier, mais il me retourne tjrs 0!
help, merci
g mi a jour le txt du lien plu haut.
Marsh Posté le 30-12-2004 à 22:29:28
Daniel59 a écrit : Bon il n'y a plu de rapport avec le sujet, mais bon maintenant ke t'a vu ma fonction |
Pourquoi feof()? Qui t'as dit d'utiliser cette fonction ? Encore un prof à la masse ?
Pour déterminer si la lecture a été interrompue, il faut utiliser le code retourné par la fonction de lecture
fgets() -> NULL
fgetc() -> EOF
Marsh Posté le 30-12-2004 à 22:30:52
Emmanuel Delahaye a écrit : Pourquoi feof()? Qui t'as dit d'utiliser cette fonction ? Encore un prof à la masse ? |
Au fait dans ton code, tu n'as rien corrigé. Je vois toujours des scanf(). (à moins que mon cache me joue des tours...)
Marsh Posté le 30-12-2004 à 22:56:42
Laisser mon prof la ou il est, chui seul devant mon ecran, ya pas de prof!
Et puis keski ont mes scanf ?? de toute façon de ce coté g pas fini puisque des etoiles devront apparaitre pour le mot de passe.
Mais il fonctionne pour l'instant!
Sinon bah v voir pour fonction de lecture, va falloir changé un pe.
merci
Marsh Posté le 30-12-2004 à 23:11:45
Voila donc ça marche, des do-while arrange l'affaire.(txt mi a jour)
Maintenant je doi mettre des etoile kan on tape le mot de passe...
Marsh Posté le 30-12-2004 à 23:12:16
scanf çà pue, utilise fgets ou getline (GNU) puis sscanf. Il te suffit de chercher un peu sur le net et psssst le C n'est pas fiable si tu ne vérifies pas le bonne usage de tes fonctions, tu as donc intéret à te renseigner un minimum (net, page de man, bouquins...) si tu veux t'y mettre sérieusement.
Pour le mot de passe je t'aurais bien conseillé getpass (sans etoile) mais c'est considéré comme obsoléte...
Marsh Posté le 30-12-2004 à 23:24:03
Il n'y a pas de contrôle lorsque tu parcours les tableaux dans tes boucles "do ... while".
Code :
|
Tu pourrais définir une constante ("MAX_TAILLE_..." ) et l'utiliser à la fois pour définir tes tableaux et ajouter un contrôle dans tes boucles.
Marsh Posté le 30-12-2004 à 18:48:18
Salut,
Comment puis je remettre mon tableau a zero ?
doi-je passer par une boucle obligatoirement?
les 2 tableau que je ve remettre a zero,je les ai déclarer ainsi:
char tab2[60]={0};
char tab3[60]={0};
svp, merci