2017-07-12 4 views
0

J'essaie d'ajouter en continu un caractère à la fin d'une chaîne. Je fais cela par la course dans ma principaleEspaces aléatoires ajoutés lors de l'utilisation de strcat

char String[256]; 
char alphabets[26] = "abcdefghijklmnopqrstuvxyz"; 
for (int i = 0; i < 257; i++) { 

      char newChar = alphabets[indexOfNewChar-1]; 
      printf("new char = %c\n",newChar); 
      strcat(String,&newChar); 

      printf("%s\n",String); 
} 

quand j'ai couru cette pile du code de c'est imprimé new char = b bkhobtj dfhhai bbdhgfcafgcfi bbaccfeai afebaci aedgdddai hei hfedhbi dabeedbi i cfhi i caddbhgbi i acfi cehbhcddcahbhbabi aaadi hi ffhhccbccfbbfggfdhebgeacecai cefdcdb

Comme vous pouvez le voir, il y a des espaces et des nouvelles lignes qui apparaissent au hasard pendant la course. Après avoir réalisé les apparitions de ces espaces au hasard, j'ai essayé de supprimer les espaces vides avec

char* removeSpaces(char* input) 
{ 
    int i,j; 
    char *output=input; 
    for (i = 0, j = 0; i<strlen(input); i++,j++) 
    { 
     if (input[i]!=' ') 
      output[j]=input[i]; 
     else 
      j--; 
    } 
    output[j]=0; 
    return output; 
} 

Cependant, cela n'a pas vraiment d'incidence sur le résultat car il y avait encore des apparences d'espaces vides. Comment puis-je supprimer ces espaces vides ou mieux les empêcher d'apparaître. Sur la note de côté, le code se termine après 160+ répétitions de la boucle for. Comment puis-je surmonter cela.

+1

1) 'chaîne de caractères [256];' -> 'chaîne de caractères [256] =" ";' ou 'chaîne de caractères [256]; * String = 0; ' – BLUEPIXY

+0

2)' i BLUEPIXY

+1

3)' strcat (Chaîne, & newChar); '->' strncat (Chaîne, & newChar, 1); ' – BLUEPIXY

Répondre

2

newChar est un simple char; &newChar est pas une chaîne. Une chaîne a besoin d'un terminateur nul. strcat en cherche un, et concaténer les caractères parasites qu'il trouve jusqu'à ce qu'il en trouve un (bien que ce comportement ne soit pas défini, cela pourrait provoquer le crash du programme).

+0

merci beaucoup. Cela fonctionne parfaitement bien maintenant –