2014-07-26 3 views
1

입력 문자열을 반대로하고 마지막 문자를 가리키는 포인터를 사용하여 포인터 주소가 감소하는 동안 문자열을 인쇄하도록합니다. 그러나, 나는 전체 문자열을 얻을 수 없습니다. 아무도 나에게 무엇이 잘못되었는지를 말해 줄 수 있습니까?입력 문자열 반전

//Reverse a charater string 
#include<stdio.h> 
int main() 
{ 
    char a[50]; 
    int l; 
    int *p; 
    printf("Please input a character string:\n"); 
    scanf("%s",a); 
    l = strlen(a); 
    for (p = &a[l-1]; p >= a; p--) 
    { 
    printf("%c",*p); 
    } 
    printf("\n"); 
    return 0; 
} 

Output: 
Please input a character string: 
asdfasdfasdf 
fff 
+3

[* reverse *] (http://www.merriam-webster.com/dictionary/reverse)를 의미합니까? –

답변

2

문제는 *pint 유형을 사용하는 것입니다.

int는 32 비트 폭 (char보다 4 배 크다)이므로 포인터가 감소 될 때 문자열의 뒤쪽에 네 번째 문자가 인쇄됩니다.

따라서, 샘플 문자열, asdfasdfasdf, 마지막 f 포인터 점, 다음 중간 f, 다음 첫 번째 f와.

유사 예 :

Please input a character string: 
abcdefghijklmno 
l is 15, a[l-1] is o 
okgc 
Press any key to continue . . . 

당신이 역순 문자열의 모든 문자를 가리키는 제대로 감소 할 char 유형에 포인터를 변경하는 경우

.

+1

네 말이 맞아! 고맙습니다! – Jinlong

3

정수 포인터로 p을 선언했습니다. char 포인터 여야합니다. 이 sizeof(T)에 의해 변경 당신이/감소를 유형 T*의 포인터를 증가하면

int *p; 

char *p; 
+1

이것은 단지 한 단계 일뿐입니다. 나는 그 부분을 대체하는 것이 문제를 완전히 해결할 것이라고 생각하지 않는다. 아직도 +1 –

+0

당신이 옳습니다! 고맙습니다! – Jinlong

1

해야합니다, 주소가 포함되어 있습니다. pint*으로 선언되었으므로 포인터 주소는 sizeof(int)만큼 변경됩니다. 귀하의 컴퓨터에 sizeof(int) == 4*sizeof(char), 당신이 볼 결과를 설명. p의 유형을 char*으로 변경하십시오.

+0

당신 말이 맞아요! 고맙습니다! – Jinlong