Caractère de fin de chaine

Résolu
Bonjour,

J'ai un problème que je n'arrive pas à résoudre :

char tmp[9];
char tab[9][9];       //déja rempli correctement

for ( i=0 ; i<=8 ; i++ )
{
       tmp[i] = tab[0][i]
}

printf("%s",tmp);


Résultat : 3.6515561@

Comment ne pas avoir ce foutu '@' à la fin de ma chaine tmp ?

Merci d'avance !

2 réponses

  1. Contributeur
    Bonjour,

    for ( i=0 ; i<=8 ; i++ )
    {
    tmp[i] = tab[0][i]
    }


    Une chaîne doit se terminer par un '\0'. Il suffit donc de faire tmp[8]='\0';
    Tu perdras au passage un caractère. Si c'est gênant, il faudra donc allouer une case de plus (10 au lieu de 9).

    Sinon plutôt que faire ta boucle, tu peux faire :
    strcpy(tmp[i], tab[0][i]); (en espérant que tu as bien mis un '\0' dans tab.

    Et si tu fais ça, juste pour l'afficher, tu peux même te contenter d'un simple : printf("%s", tab[i]);
    0
    1. Merci de ta réponse Fiddy.

      En fait, je fais ça car je ne peux pas directement afficher tab[i].

      Si j'affiche tab[4] par exemple, je veux qu'il m'affiche :
      tab[4][0] puis tab[4][1] jusqu'à tab|[4][8]. Mais il continue avec tab[5][0] et jusqu'à tab[8][8].

      J'ai donc voulu créer une temporaire pour seulement les 9 caractères voulus.
      J'ai essayé de rajouter ceci :

      char tmp[10];
      char tab[9][9];       //déja rempli correctement
      
      for ( i=0 ; i<=8 ; i++ )
      {
             tmp[i] = tab[0][i]
      }
      tmp[10] = '\0';
      
      printf("%s",tmp);


      Seulement, j'obtiens toujours le même résultat.
      0
      1. Contributeur
        Si j'affiche tab[4] par exemple, je veux qu'il m'affiche :
        tab[4][0] puis tab[4][1] jusqu'à tab|[4][8]. Mais il continue avec tab[5][0] et jusqu'à tab[8][8].

        Donc ton tableau n'est pas vraiment correct. En dernière position de chaque ligne, tu devrais avoir un '\0'. Ainsi tu pourrais faire directement printf("%s", tab[4]); sans problème.

        tmp[10] = '\0';
        Un tableau commence à l'indice 0. Donc il faut mettre tmp[9];
        0
      2. Effectivement, en rajoutant le '\0', je découpe comme je veux mes chaînes dans mon tableau à 2 dimensions =) Merci infiniment !
        0