反转输入字符串

时间:2014-07-26 03:16:46

标签: c

我想反转输入字符串,并使用指向最后一个字符的指针,并在指针地址减少时使其打印字符串。但是,我无法获得整个字符串。有谁能告诉我出了什么问题?

//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 个答案:

答案 0 :(得分:3)

您已将p声明为整数指针。它应该是一个char指针。

int *p;

应该是

char *p;

答案 1 :(得分:2)

问题是int使用*p类型。

由于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类型,它将正确递减,以相反的顺序指向字符串中的每个字符。

答案 2 :(得分:1)

当您递增/递减T*类型的指针时,其中包含的地址会更改sizeof(T)。由于您已将p声明为int*,因此指针地址会更改sizeof(int)。在您的计算机sizeof(int) == 4*sizeof(char)上,解释您看到的结果。将p的类型更改为char*