Question

J'écris un programme C mais je continue à avoir des problèmes avec mon tableau de caractères. Je continue à obtenir des ordures quand je l'imprimer à l'aide prinf. voici un exemple de ce que je reçois quand je l'imprimer:

char à t.symbol est Aôÿ¿ omble chevalier à tabl [0] .symbol est un
omble chevalier à tabl [1] .symbol est un
omble chevalier à tabl [2] .symbol est un
carbonisation à tabl [3] est D .symbol
omble chevalier à tabl [4] .symbol est e
carbonisation à tabl [5] .symbol est-f
carbonisation à tabl [6] .symbol est G
omble chevalier à tabl [7] .symbol est
h omble chevalier à tabl [8] .symbol est i
omble chevalier à tabl [9] .symbol est x
omble chevalier à t [0] .symbol est a0AÃ omble chevalier à t [1] .symbol est b) @ Ã4 omble chevalier à t [2] .symbol est CKU * omble chevalier à t [3] .symbol est Aôÿ¿ omble chevalier à t [4] .symbol est Rallier

quelqu'un pourrait me dire comment se débarrasser de la poubelle dans le tableau de caractères?

ici est 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;
}
Était-ce utile?

La solution

Vous avez l'un des deux problèmes possibles. Si vous voulez vraiment un caractère unique, vous devriez être l'imprimer avec %c, pas %s comme ceci:

printf("char at t.symbol is %c \n", t[3].symbol[0]);

Si vous voulez vraiment des chaînes que vous devez définir SYMBSIZE être 1 supérieure à la longueur maximale d'un symbole et de mettre char NUL (\0) à la fin. Vous pouvez le faire deux manières:

  1. tabl[6].symbol[0] = 'g'; tabl[6].symbol[1] = '\0';
  2. strcpy(tabl[6].symbol, "g");

Autres conseils

Le problème est que les chaînes en C sont nulles terminées. Cependant, votre tableau est juste assez grand pour un seul caractère, il ne peut pas se terminer par un (ce qui nécessite au moins 2 caractères)

Pourquoi êtes-vous des déchets? Quand vous dites tabl[0].symbol[0] = 'A';, à tabl[0].symbol[0] en mémoire que vous avez A??? et nous ne savons pas ce que ??? est. De toute évidence, il est parfois 0 (où vous obtenez une sortie correcte), il est parfois pas (ordures).

Pour résoudre ce problème, utilisez le spécificateur de format %c pour imprimer un caractère unique au lieu d'une chaîne à zéro terminal. Si vous voulez vraiment imprimer des chaînes, vous devez faire votre tampon de chaîne plus grande et null-il résiliez:

SYMBSIZE = 10, alors tabl[0].symbol[1] = '\0'; note, vous voulez généralement d'utiliser les fonctions de chaîne:

// copy "a" to that memory location, will be null-terminated.
strcpy(tabl[0].symbol, "a"); 

Si votre tampon est pas assez grand pour la chaîne, Couurira la mémoire tampon.

Vos tableaux ne sont pas assez grand pour stocker des chaînes. Vous avez besoin d'un espace supplémentaire pour le caractère nul. Changer SYMBSIZE à 2 ou imprimer comme char. Soit on doit travailler.

EDIT: En outre, vous ne mettez pas les caractères nuls de toute façon. Impression d'une chaîne va continuer jusqu'à ce qu'il touche \ 0, donc vous aurez besoin de faire SYMBSIZE = 2 puis faire symbol[1] = '\0'; afin d'imprimer comme une chaîne.

EDIT2: Ou tout simplement changer votre %s à un %c (imprimer un seul omble chevalier à la fois au lieu de la chaîne entière)

Pour imprimer un omble chevalier, vous devriez utiliser% c dans le printf.

   printf("char at t.symbol is %c \n", t[3].symbol);

Votre compilateur doit être pour vous avertir que la chaîne de format ne correspond pas aux valeurs transmises. avertissements de compilation sont là pour une raison.

Si vous voulez que les caractères, vous devez utiliser% c et non% s pour imprimer les caractères.

printf("char at tabl[%d].symbol is %c \n",x, tabl[x].symbol);

Il existe un moyen de résoudre le problème. Fondamentalement, une fois que nous Initialiser le tableau char donc nous devons la remplacer par la valeur des ordures à Null.     enter code here

void main()
{
    int amsb[10];
    int i,k,i1;
    char arr[25];
    clrscr();
    printf("Enter the 10 element");

    for( i1=0;i1<25;i1++) {
        arr[i1]='\0';
    }

    for( k=0;k<25;k++) {
        printf("%c",arr[k]) ;

        if(arr[k]=='\0')  {
            break;                
        }
    }

    getch();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top