问题描述
- C语言,请问这个逆序输出的程序哪里错了
-
#include
int main(void)
{char ar[] = "abc";
char ar1[4] = {0};
//设置指针p指向数组ar的首地址
char *p = ar;
//使指针p指向数组ar的最后一个有效字符
for (; *p++ != '';)
;
p--;
//获取数组ar的长度
int i,j;
i = strlen(ar);
//将逆序排列存储到数组ar1中
for (j = 0; j < i; j++)
ar1[j] = *p--;
//输出逆序数组
puts(ar1);return 0;
}
解决方案
//使指针p指向数组ar的最后一个有效字符
for (; *p++ != '';)
;
p--;
//获取数组ar的长度
此处的循环,在最后一次检测到时,又将p加了1,因此此时的p指向的是abc后边的第二个位置,所以p--应该执行两次才行。
for (; *p++ != '';)
;
p-=2;
解决方案二:
关于c语言逆序输出
解决方案三:
//使指针p指向数组ar的最后一个有效字符
for (; *p++ != '';)
;
p--;
//获取数组ar的长度
此处的循环,在最后一次检测到时,又将p加了1,因此此时的p指向的是abc后边的第二个位置,所以p--应该执行两次才行。
for (; *p++ != '';)
;
p-=2;
解决方案四:
char ar[] = "abc";
char ar1[4] = {0};
//设置指针p指向数组ar的首地址
//char *p = ar;
//使指针p指向数组ar的最后一个有效字符
//for(; *p++ != '';)//错在这里了,你的这样算法导致了指针越界,即超出了ar的范围,再者没必要这样切换指针,
// ;
//p--;
char *p = (char *)&ar[strlen(ar) - 1];//正确获取方式
//获取数组ar的长度
int i,j;
i = strlen(ar);
//将逆序排列存储到数组ar1中
for(j = 0; j < i; j++)
ar1[j] = *p--;
//输出逆序数组
puts(ar1);
return 0;
或者
void test(char *in,char *out)
{
unsigned long len,i = 0;
len = strlen(in);
do
{
out[i++] = in[--len];
} while (len != 0);
}