comment se débarrasser des ordures dans le tableau de caractères?
Je suis en train d'écrire un programme en C, mais je continue à avoir des problèmes avec mon tableau de caractères. Je reçois des poubelles quand je l'imprimer à l'aide de prinf. voici un exemple de ce que je reçois quand je l'imprimer:
char à t.le symbole est Aôÿ¿
char à tabl[0].le symbole est Un
char à tabl[1].le symbole est un
char à tabl[2].le symbole est un
char à tabl[3].symbole d
char à tabl[4].le symbole est e
char à tabl[5].symbole f
char à tabl[6].symbole g
char à tabl[7].symbole h
char à tabl[8].le symbole est je
char à tabl[9].symbole x
char à t[0].le symbole est a0AÃ
char à t[1].le symbole est b)@Ã4
char t[2].le symbole est ckU*
char t[3].le symbole est Aôÿ¿
char t[4].le symbole est gØ
quelqu'un pourrait-il me dire comment se débarrasser des ordures dans le tableau de caractères?
voici mon code
#define MAX 100
#ifndef SYMBSIZE
#define SYMBSIZE 1
#endif
typedef struct tableme
{
char symbol[SYMBSIZE];
int value;
int casenmbr;
int otherinfo;
}tabletype;
int main(int argc, char **argv)
{
tabletype t[MAX];
t[3].symbol[0] = 'A';
t[0].value=1;
t[0].casenmbr = 7;
t[0].otherinfo = 682;
tabletype tabl[MAX];
tabl[0].value = 1;
tabl[0].symbol[0] = 'A';
tabl[1].value = 11;
tabl[1].symbol[0]= 'a';
tabl[2].value = 12;
tabl[2].symbol[0] = 'a';
tabl[3].value = 13;
tabl[3].symbol[0] = 'd';
tabl[4].value = 14;
tabl[4].symbol[0] = 'e';
tabl[5].value = 15;
tabl[5].symbol[0] = 'f';
tabl[6].value = 16;
tabl[6].symbol[0] = 'g';
tabl[7].value = 17;
tabl[7].symbol[0] = 'h';
tabl[8].symbol[0] = 'i';
tabl[9].symbol[0] = 'x';
t[1].symbol[0] = 'b';
t[0].symbol[0]= 'a';
t[2].symbol[0]= 'c';
t[4].symbol[0]= 'g';
printf("char at t.symbol is %s \n", t[3].symbol);
for( x=0;x<10;x++)
{
printf("char at tabl[%d].symbol is %s \n",x, tabl[x].symbol);
}
int j;
for(j = 0; j<5;j++)
{
printf("char at t[%d].symbol is %s \n",j, t[j].symbol);
}
return 0;
}
OriginalL'auteur fang_dejavu | 2010-03-19
Vous devez vous connecter pour publier un commentaire.
Vous avez l'un des deux problèmes possibles. Si vraiment vous ne voulez qu'un seul personnage, vous devriez être en impression avec
%c
, pas%s
comme ceci:Si vous voulez vraiment chaînes que vous avez à définir
SYMBSIZE
à 1 de plus que la longueur maximale d'un symbole et de mettre un NUL (\0
) char à la fin. Vous pouvez le faire de deux façons:tabl[6].symbol[0] = 'g'; tabl[6].symbol[1] = '\0';
strcpy(tabl[6].symbol, "g");
Comme une extension de ce que gabe dit, la raison pour laquelle vous obtenir le plus de charabia lorsque vous essayez d'imprimer qu'une chaîne est parce que vos tableaux ne sont pas initialisées. Le charabia que vous voyez est la poubelle qui est arrivé à être dans la mémoire utilisée par les tableaux de laquelle ils ont été attribués.
OriginalL'auteur Gabe
Le problème est que les chaînes de caractères en C sont null. Cependant, votre tableau est suffisamment gros pour un caractère, donc il ne peut pas être nul (cela nécessite au moins 2 caractères)
Pourquoi êtes-vous déchets? Quand vous dites
tabl[0].symbol[0] = 'A';
, àtabl[0].symbol[0]
dans la mémoire que vous avezA???
et nous ne savons pas ce???
est. Évidemment, il est parfois 0 (où vous obtenez de bons résultats), parfois, il n'est pas (ordures ménagères).Pour résoudre ce problème, utilisez la
%c
spécificateur de format pour imprimer un caractère unique au lieu d'une chaîne se terminant par null. Si vous voulez vraiment imprimer des chaînes de caractères, vous avez besoin pour faire de votre tampon de chaîne plus grand et un zéro à la fin, il:SYMBSIZE = 10
, alorstabl[0].symbol[1] = '\0';
Remarque, généralement, vous souhaitez utiliser les fonctions de chaîne:Si votre tampon n'est pas assez grand pour la chaîne, il va de dépassement de la mémoire tampon.
Vous avez besoin de passer des arguments à la fonction strcpy
Merci, j'ai oublié.
OriginalL'auteur GManNickG
Vos tableaux ne sont pas assez grand pour stocker des chaînes de caractères dans les. Vous avez besoin d'un espace supplémentaire pour le caractère null. Changement SYMBSIZE de 2 ou de l'imprimer comme un char. Soit il faut travailler.
EDIT: Aussi, vous ne mettez pas les caractères null dans de toute façon. L'impression d'une chaîne va continuer jusqu'à ce qu'elle frappe \0, de sorte que vous aurez besoin de faire
SYMBSIZE = 2
et ensuite fairesymbol[1] = '\0';
pour imprimer une chaîne de caractères.EDIT2: Ou tout simplement changer votre
%s
à un%c
(impression d'un seul caractère à la fois au lieu de l'ensemble de la chaîne)OriginalL'auteur Brendan Long
Pour imprimer un char, vous devriez être en utilisant %c dans le printf.
Votre compilateur doit être pour vous avertir que la chaîne de format ne correspond pas aux valeurs transmises.
Les avertissements du compilateur sont là pour une raison.
OriginalL'auteur Dipstick
Si vous voulez les caractères, alors vous avez besoin d'utiliser le %de c et pas %s pour imprimer les caractères.
OriginalL'auteur Catalin Morosan
Il y a un moyen de résoudre le problème. Fondamentalement, une fois que nous initialiser le char tableau nous devons donc de la remplacer par la valeur d'ordures à NUll.
enter code here
OriginalL'auteur Chandra Shekhar Paatni