Caractère de fin de chaine

Résolu
fabinou87 Messages postés 35 Statut Membre -  
fabinou87 Messages postés 35 Statut Membre -
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. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  2. fabinou87 Messages postés 35 Statut Membre 2
     
    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. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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. fabinou87 Messages postés 35 Statut Membre 2
       
      Effectivement, en rajoutant le '\0', je découpe comme je veux mes chaînes dans mon tableau à 2 dimensions =) Merci infiniment !
      0