2012-10-13 7 views
1

Je prends en entrée une chaîne avec des espaces et remplace les espaces par le caractère NULL '\ 0'. Quand j'imprime la chaîne maintenant, je m'attends seulement à ce que la partie soit le premier caractère NULL qui était le premier espace plus tôt mais j'obtiens la chaîne originale.Impression d'une chaîne contenant des caractères nuls

Voici le code-

#include<stdio.h> 

int main(){ 
    char a[1000]; 
    int length, i = 0; 
    length = 0; 
    scanf("%[^\n]s", a); 
    while(a[i]!='\0') 
      i++; 
    length = i; 
    printf("Length:%d\n", length); 
    printf("Before:%s\n", a); 
    for(i=0;i<length;i++){ 
      if(a[i] == " ") 
        a[i] = '\0'; 
    } 
    printf("After:%s\n", a); 
    return 0; 
} 

Quel est le problème dans ce domaine?

+8

'a [i] ==" « ' est pas le même que 'a [i] == ' « '. – DCoder

+3

Et prenez l'habitude de compiler avec les informations de débogage et tous les avertissements activés. Si vous compilez sur Linux avec 'gcc -Wall -g' vous recevrez un avertissement pour vous aider à attraper votre erreur. –

+0

@DCoder vous devriez publier cela comme une réponse. –

Répondre

6

Votre code est erroné.

for(i=0;i<length;i++){ 
     if(a[i] == " ") 
       a[i] = '\0'; 
} 

La comparaison tente de comparer un personnage avec un pointeur (désigné par « » -> Cela devient un pointeur sur une chaîne de caractères Dans ce cas, la chaîne est seulement d'avoir un espace..) Cela peut être fixé par le remplacement suivant

for(i=0;i<length;i++){ 
     if(a[i] == ' ') 
       a[i] = '\0'; 
} 

Ou mieux de le faire de cette manière, puisque vous pouvez avoir d'autres espaces aussi comme onglet, en dehors de l'espace. (S'il vous plaît inclure ctype.h aussi)

for(i=0;i<length;i++){ 
      if(isspace(a[i])) 
       a[i] = '\0'; 
} 
-1

Remplacez " " par printf par ' '. Cela a fonctionné comme prévu quand j'ai essayé.

+0

Downvoter, pls expliquer! – Raj

+3

Ce n'est pas 'printf' que' '" '' devrait être remplacé, mais dans le test 'if'. –

+3

Je ne vous ai pas déprécié, mais si votre réponse est plutôt correcte (en changeant le pointeur de chaîne de caractères sur le caractère espace), cela n'a rien à voir avec la fonction 'printf'. Je suppose que c'est ce qui vous a donné la downvote. –

Questions connexes