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