2012-10-13 6 views
1

입력란에 공백이있는 문자열을 입력하고 공백을 '\ 0'NULL 문자로 바꿉니다. 이제 문자열을 출력 할 때 첫 번째 공백 문자 인 첫 번째 NULL 문자까지만 예상하지만 원래 문자열은 가져오고 있습니다. 여기null 문자가 포함 된 문자열 인쇄

이의 잘못은 무엇 코드 -

#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; 
} 

입니까?

+8

는 'A [I] ==' '' '이 [I] ==' ''와 동일하지 않다 (도 ctype.h 포함주십시오). – DCoder

+3

그리고 디버깅 정보와 모든 경고가 활성화 된 상태에서 컴파일하는 습관을 갖춰주십시오. 리눅스에서'gcc -Wall -g'를 사용하여 컴파일하면 실수를 잡는 데 도움이되는 경고 메시지가 나타납니다. –

+0

@DCoder 답변으로 게시해야합니다. –

답변

6

코드가 잘못되었습니다. (->이 문자의 문자열에 대한 포인터가된다이 경우 문자열 만의 공간을 가지고있다 ""로 표시..) 이 할 수

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

는 비교가 포인터로 문자를 비교하기 위해 노력하고있다 당신이 떨어져 공간에서 너무 탭과 같은 다른 공백을 가질 수 있기 때문에, 이러한 방식으로 그것을 할 다음 교체에 의해

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

또는 더 나은 고정 될 수있다. 는

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

printf : ' '" "을 입력하십시오. 시도 할 때 예상대로 작동했습니다.

+0

Downvoter, pls explain! – Raj

+3

'print'에서''''는 대체되어야하지만'if' 테스트에서는 없습니다. –

+3

나는 당신을 downvote하지 않았지만 당신의 대답이 일종의 올바른 (C- 문자열 포인터를 공백 문자로 바꾸는) 동안, 그것은 printf와는 아무런 관련이 없다. 내 추측은 그것이 당신에게 downvote가있는 것입니다. –

관련 문제