Caractère de fin de chaine

Résolu/Fermé
fabinou87 Messages postés 30 Date d'inscription mercredi 8 mai 2013 Statut Membre Dernière intervention 9 mars 2016 - 9 mai 2013 à 15:07
fabinou87 Messages postés 30 Date d'inscription mercredi 8 mai 2013 Statut Membre Dernière intervention 9 mars 2016 - 9 mai 2013 à 16:26
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 !
A voir également:

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 843
9 mai 2013 à 15:31
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
fabinou87 Messages postés 30 Date d'inscription mercredi 8 mai 2013 Statut Membre Dernière intervention 9 mars 2016 2
9 mai 2013 à 15:42
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 843
9 mai 2013 à 16:02
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
fabinou87 Messages postés 30 Date d'inscription mercredi 8 mai 2013 Statut Membre Dernière intervention 9 mars 2016 2
9 mai 2013 à 16:26
Effectivement, en rajoutant le '\0', je découpe comme je veux mes chaînes dans mon tableau à 2 dimensions =) Merci infiniment !
0