指针-C语言,请问这个逆序输出的程序哪里错了

问题描述

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);
}

时间: 2024-08-22 14:29:42

指针-C语言,请问这个逆序输出的程序哪里错了的相关文章

strlen-C语言字符串单词逆序输出

问题描述 C语言字符串单词逆序输出 想要实现字符串里的单词逆序输出,如 给定"how are you",应输出"you are how" 下面的代码想要利用递归算法实现,但发现运行之后没实现,求解!万分感谢! #include<stdio.h> #include<string.h> void fun(char *p,int i,int len); int main() { char a[50]="how are you";

c#-C#程序问题,,C#输入123456然后逆序输出,程序怎么写?

问题描述 C#程序问题,,C#输入123456然后逆序输出,程序怎么写? C#输入123456然后逆序输出,程序怎么写啊,求大神帮帮忙,自己刚学,实在写不来 解决方案 string s=""123456"";for(int i=s.Length-1;i>=0;i--)Console.Write(s[i]); 解决方案二: foreach (var p in numbers.Reverse()) { Console.WriteLine(p); } 解决方案三:

C语言解字符串逆序和单向链表逆序问题的代码示例_C 语言

字符串逆序上次面试碰到一个单向链表逆序的题目,幸好对字符串逆序比较熟悉,类比做出来了.字符串逆序比较简单,直接上代码: void stringReverse(char* p1,char* p2) { if(p1==p2)return; //swap the value of p1 ,p2 *p1=(*p1)+(*p2); *p2=(*p1)-(*p2); *p1=(*p1)-(*p2); if(p1==p2-1)return; else stringReverse(++p1,--p2); } 调

课后思考题2:C语言用递归算法,将一个字符串逆序输出,提示:字符串以&amp;amp;#39;\0&amp;amp;#39;结尾。

问题描述 课后思考题2:C语言用递归算法,将一个字符串逆序输出,提示:字符串以''结尾. 课后思考题2:C语言用递归算法,将一个字符串逆序输出,提示:字符串以''结尾. 解决方案 void foo(char * s) { if (!s) return; foo(s + 1); printf("%c", *s); } 解决方案二: void function(char *p) { if(*p=='/0') return ; function(p+1); printf("%c&q

C语言OJ项目参考(2568) 字符串逆序输出

2568: 字符串逆序输出 Description 编写一个函数,功能是使输入的字符串逆序输出. Input 输入一串字符串,注意字符串中不要有空格. Output 输出该字符串的逆序. Sample Input** ABCDEFG Sample Output GFEDCBA HINT #include<stdio.h> #include<string.h> int main() { char str[100]; scanf("%s",str); int len

指针-c++程序求教,strtok记号化句子,逆序输出,求大神

问题描述 c++程序求教,strtok记号化句子,逆序输出,求大神 #include using namespace std; #include using namespace std; char *t[50]; void print(char*tptr,char*tptrr,int i) { if(tptrr!=NULL) {t[i]=tptr;tptr=strtok(NULL," ");tptrr=strtok(NULL," ");print(tptr,tptr

c语言实现字符串逆序

面试经常会遇到的题,C语言实现字符串逆序.如输入"abcd",输出"dcba". 最近自己整理了一下,下面代码已经过测试. #define Max 200 main() { char str[Max]; printf("请输入字符串:"); gets(str); int len=0; char *strlen=str; char *left=str; char temp; while(*strlen++)len++; strlen-=2;//这里

c++-C++编程小白求教,逆序输出字符串

问题描述 C++编程小白求教,逆序输出字符串 #include #include #include #include //逆序输出字符串 using namespace std; void print(const char a[],int size){ int i; for(i=size;i>0;i--) cout<<a[i-1]; cout<<endl; } void main(){ int i=0; char a[50]; while(getchar()!='n'){ a

递归函数-函数实现数组的逆序输出

问题描述 函数实现数组的逆序输出 int main(int argc, char const *argv[]) { int a[5] = {1, 2, 3, 4, 5}; int i; recui(a, 5); for(i=0; i<5; i++) { printf("%d ", a[i]); } printf(" "); return 0; } void recui(int a[], int k) { int tmp; if()// 填空 { recui()