Se connecter avec
S'enregistrer | Connectez-vous

Vider un tableau

Dernière réponse : dans Programmation

Bonsoir,

Voilà j ai un peiti soucis.
Dans une fonction , j ai un tableau de caractere qui contient à un moment donné une chaine de caractere, le probleme c'est que je voudrais vider ce tableau pour le reutiliser dans la meme fonction (afin qu il puisse contenir une autre chaine).

Je vois pas trop comment faire ...
Merci d'avance !

Autres pages sur : vider tableau

Lassé par la pub ? Créez un compte

Citation :

Dans une fonction , j ai un tableau de caractere qui contient à un moment donné une chaine de caractere, le probleme c'est que je voudrais vider ce tableau pour le reutiliser dans la meme fonction (afin qu il puisse contenir une autre chaine).

Pourquoi faire ? C'est rarement utile. Il y a peut êre un problème de conception ou de codage.
Montre le code de la fonction.

c'est qu en fait, j ai une boucle dans laquelle j ai mon tableau.
Dans ce tableau j ajoute à chaque fois une lettre à partir d une grille, donc ce tableau contiendra le prefixe d'un mot qui peut exister ou pas.
S il existe je l ajoute à une liste de mots sinon je dois le vider et repasser par la boucle pour essayer de creer un autre..

Je sais pas si c'est assez clair mais le code encore moins comprehensible....

Citation :
c'est qu en fait, j ai une boucle dans laquelle j ai mon tableau.
Dans ce tableau j ajoute à chaque fois une lettre à partir d une grille, donc ce tableau contiendra le prefixe d'un mot qui peut exister ou pas.
S il existe je l ajoute à une liste de mots sinon je dois le vider et repasser par la boucle pour essayer de creer un autre..

Je sais pas si c'est assez clair mais le code encore moins comprehensible....

Tu 'ajoutes' avec quoi ? Ce serait plus simple de voir le code...

C'est un probleme simple, tu n'aurait probablement pas besoin d'une autre fonction mais bon voici:

void CleanTable(char* ioDirty, const int iSizeOfDirty)
{

//corrigez moi si je me souvient pas de l'api.
memset(ioDirty,iSizeOfDirty,0);

//Ou vive la force brute:
for( i = 0 ; i < iSizeOfDirty; i++)
{
*ioDirty+i = 0
}

}

la trotte a dit :
No excuse...

http://dpobel.free.fr/man/html/affiche_man.php/1765/man...
  1. memset (ioDirty, 0, iSizeOfDirty);

Pour la peine tu te prends une Force 5 pour "Usage de la 'Notation Hongroise' version Microsoft (avec les types)"

http://mapage.noos.fr/emdel/goret.htm


:cry:  quand je lis le code du projet sur lequel je travaille (1 000 000 lignes écrites depuis 7-8 ans par 15-20 personnes), et bien on est allègrement dans le niveau 9-10, avec quelques portions de codes récentes de niveau 5...

je vais me pendre :pt1cable: 
Expert Programmation

c'est un peu conffu cette echelle de goret, en plus certaines regles sont discutables (genre la guerre tab vs space), et on fond on ne sait pas ce qu'est un ''code parfait''

sinon :
Citation :
Force 8
Plus d'un return par fonction
comment tu la fait alors ta gestion d'erreur ?
Expert Programmation

j'aime pas ce genre de code moi:
  1. int FaireUnTasDeTruc(b) {
  2. int YaUneErreur=NON;
  3. if (ArgumentCorrect(b)) {
  4. ChezPasQuoi machin;
  5. machin=FaireUnTruc(b);
  6. if (NoError(machin)) {
  7. ChezPasQuoi2 machin2;
  8. DesDonnees* a;
  9. a=NULL;
  10. a=FaireUnTrucImportantGenreUnMalloc()
  11. machin2=FaireUnAutreTrucavec(a);
  12. if (NoError(machin2) && a!=NULL) {
  13. if (!TraiterLeTrucQuaFaitFaireUnAutreTrucAvec(a))
  14. AfficherLeTruc(a);
  15. else YaUneErreur=AfficherUneErreur();
  16. }
  17. else YaUneErreur=AfficherUneErreur();
  18. DefaireLeTrucImportant(a);
  19. }
  20. else YaUneErreur=AfficherUneErreur();
  21. }
  22. else YaUneErreur=OUI;
  23. return YaUneErreur
  24. }
c'est incompréhensible, le seul truc qui ressort c'est la gestion d'erreur ...

elch a dit :
j'aime pas ce genre de code moi:<...> c'est incompréhensible, le seul truc qui ressort c'est la gestion d'erreur ...

  1. ERR FaireUnTasDeTruc (T b)
  2. {
  3. ERR Erreur = OK;
  4. if (ArgumentCorrect(b))
  5. {
  6. ChezPasQuoi machin = FaireUnTruc(b);
  7. if (NoError(machin))
  8. {
  9. DesDonnees* a = FaireUnTrucImportantGenreUnMalloc();
  10. ChezPasQuoi2 machin2 = FaireUnAutreTrucavec(a);
  11. if (NoError(machin2) && a != NULL)
  12. {
  13. if (!TraiterLeTrucQuaFaitFaireUnAutreTrucAvec(a))
  14. {
  15. AfficherLeTruc(a);
  16. }
  17. else
  18. {
  19. Erreur = ERR_A;
  20. }
  21. }
  22. else
  23. {
  24. Erreur = ERR_B;
  25. }
  26. DefaireLeTrucImportant(a);
  27. }
  28. else
  29. {
  30. Erreur = ERR_C;
  31. }
  32. }
  33. else
  34. {
  35. Erreur = ERR_D;
  36. }
  37.  
  38. /* eventuellement...
  39.  
  40. if (Erreur != OK)
  41. {
  42. AfficherErreur(Erreur)
  43. }
  44. */
  45.  
  46. return Erreur;
  47. }
Expert Programmation

ça c'est plus joli ?
  1. ERR FaireUnTasDeTruc(T b) {
  2. DesDonnees* a;
  3. ChezPasQuoi machin,machin2;
  4. a=NULL;
  5. if (!ArgumentCorrect(b)) {
  6. return ERR_D;
  7. }
  8. if (!NoError(machin=FaireUnTruc(b))) {
  9. AfficherUneErreur();
  10. return ERR_C;
  11. }
  12. if (!NoError(a=FaireUnTrucImportantGenreUnMalloc())) {
  13. AfficherUneErreur();
  14. return ERR_B;
  15. }
  16. if (!NoError(machin2=FaireUnAutreTrucavec(a))) {
  17. AfficherUneErreur();
  18. DefaireLeTrucImportant(a);
  19. return ERR_B;
  20. }
  21. if (!TraiterLeTrucQuaFaitFaireUnAutreTrucAvec(a)) {
  22. AfficherUneErreur();
  23. DefaireLeTrucImportant(a);
  24. }
  25. AfficherLeTruc(a);
  26. DefaireLeTrucImportant(a);
  27. return OK;
  28. }

Le problème, c'est qu'à chaque fois que tu es susceptible de quitter la fonction, tu dois penser à faire le nettoyage nécessaire.

1 point de sortie par fonction, 1 endoit où tu fais le nettoyage, c'est bien plus maintenable et plus clair.

du moins c'est mon avis...
Expert Programmation

sauf que la mon cas il est simple : il se résume à ca dans le cas normal
  1. machin=FaireUnTruc(b)
  2. a=FaireUnTrucImportantGenreUnMalloc();
  3. machin2=FaireUnAutreTrucavec(a);
  4. TraiterLeTrucQuaFaitFaireUnAutreTrucAvec(a)
  5. DefaireLeTrucImportant(a);

il ne fait qu'appeler quelques fonctions en utilisants les valeurs de retours des autres, il n'y a aucun choix, aucune boucle, et quand tu rajoute un code un peu complexe avec de la gestion d'erreur avec des if imbriqués tu différencie plus la gestion d'erreur de ce que la fonction est cencé faire.

surtout essaye de sortir de plusieurs boucles imbriquées lorsque tu as une erreur ...

c'est vrai que ça dépend des fonctions, et des règles de codage que l'on se doit d'appliquer.
Chez nous, les règles sont (en résumé et non exhaustif) :
- ne pas dépasser 3 niveaux d'imbrications dans les structures de contrôle,
- pas plus de 100 lignes par fonction

du coup, si tu respectes ces 2 contraintes, il n'est pas très dur de gérer les cas d'erreur sans mettre de goto et de return partout.

De plus, dans une autre expérience professionnelle, un outil de vérification de règles était utilisé (Logiscope). Les services des méthodes et de la qualité imposaient 1 point de sortie par fonction. Si ce n'était pas le cas, la pièce de code était rejetée et impossible de livrer le composant.

Du coup, j'ai pris certaines habitudes :) 
Lassé par la pub ? Créez un compte