2012-03-09 1 views
1
#include<stdio.h> 
int main() 
{ 
    int i,n=0; 
char str[]="karthik"; 
while(*(str+n)!='0') 
n++; 
for(i=0;i<n/2;i++) 
{char temp=str[i]; 
str[i]=str[n-i-1];str[n-i-1]=temp; 
} 
printf("%s",str); 
} 

나는 꽤 자주 묻는 질문이다. 그러나 나는 어떤 출력을 얻지 못하고있다. 나는 strlen()을 사용할 때 잘 동작했기 때문에 아래 두 줄에 약간의 오류가 있음을 알고있다.C에서이 프로그램 (문자열 반전)이 작동하지 않습니까?

while(*(str+n)!='0') 
n++; 

그래서 이런 이유로 사용하는 것이 잘못되었습니다. 전 C의 == '\0'

답변

3
while(*(str+n)!='0') 
n++; 

아이디어는 문자열의 전체 길이의 배열을 반복하는 것입니다에 C에서 char 배열의

+0

의도는 \ 0이지만 놓친 것입니다. –

+0

@karthikgorijavolu : No Problem. 대답에 작은 쪽지를 추가했습니다. –

1

끝 초보자 오전 기억하시기 바랍니다.
\0을 확인해야합니다. C 문자열이 널 (null) 측면에서 또한


while(*(str+n)!='\0') 
       ^^ 
( \0)

를 종료하기 때문에이 문제에 관련이없는, 당신은 당신의 main() 함수에서 값을 반환해야합니다 유의하지만 좋은 방법입니다.

0

while 루프에서 NULL을 확인하십시오. 널 종료 문제 외에도

while(*(str+n)!='\0') 
+4

NULL이 '\ 0'과 같지 않습니다! NULL은 종종 (void *) 0으로 정의 된 다음이 코드에서 컴파일러 경고를받을 수 있습니다. NULL은 포인터 주소를 비교하는 데에만 사용해야합니다. – Lundin

+1

설명해 주셔서 감사합니다. 나는 내 대답을 바로 잡았다. – Abhineet

1

으로

while(*(str+n)!='0') 

에서 변경, 당신은 기존의 코딩 스타일을 채택해야합니다. 한 예 :

#include <stdio.h> 

int main() 
{ 
    int i; 
    int n=0; 
    char str[]="karthik"; 

    while(str[n] != '\0') 
    { 
    n++; 
    } 

    for(i=0; i<n/2; i++) 
    { 
    char temp=str[i]; 
    str[i]=str[n-i-1]; 
    str[n-i-1]=temp; 
    } 

    printf("%s",str); 

    return 0; 
} 
+0

한 번 이상 투표 할 수 있으면 좋겠다. D –

관련 문제