为什么我写的C语言消息逆序输出会多出很多奇怪的字符

2025-04-16 23:58:06
推荐回答(2个)
回答1:

逆序输出有很多种,具体的实现方法取决于你题目的要求 1. 如果只是要求逆序输出,那么可以采用类似的方法:void reverse(char *s){if(*s=='\0')return;reverse(s+1);printf("%c",*s);}这种方法在s很长的情况下会一直递归到底,不是很好。 2. 如果需要将字符串整个逆序在函数外面输出,那么可能希望采用返回字符串指针的方式;实现如下:char * reverse( char* s ){static char *p = s+strlen(s)-1; //p是一个静态变量,指向当前递归层处理的字符串尾,而s指向字符串头if(s < p){  char c = *p; //交换头尾字符  *p = *s;  *s = c;p--; //尾向前挪一个reverse(s+1); //相当于头向后挪一个}return s;} 3.1 当然,有的时候,并不需要reverse函数本身递归,而是可以借助一些辅助的递归函数,比如说:void reversehelp(char * head, char * end){if (head < end){char c = *head;*head = *end;*end = c;reversehelp(++head, --end);}}然后在调用时像这样调用:char * reverse(char * s){char * end = s + strlen(s) - 1; reversehelp(s, end);return s;} 3.2 类似的辅助函数还可以采用一个字符串指针和一个长度参数的方式,如下例:void reversehelp( char* s, int n ){if ( n > 1 ){char c = s[n-1];s[n-1] = s[0];s[0] = c;reversehelp( s+1, n-2 );}}然后在调用时如下:char *reverse(char *s){reversehelp( s, strlen(s) );return s;}

回答2:

你没发现你没有输入吗?