突发奇想,用堆栈和管道似乎解决这个问题更简单有效,而且不用考虑字符串长度:
#include <fcntl.h>
#include <io.h>
#include <memory.h>
#include <stdio.h>
#include <string.h>
#define szSTR 256
/*递归方式逆序存储字符串,将逆序内容写入fw底层流文件*/
void rev(char * src, int fw)
{
if (!src || fw < 1) return ;
if (!*src) return ; /*如果字符串结束则返回*/
rev(src + 1, fw); /*递归到下一个字符地址*/
write(fw, src, 1); /*递归返回后将字符写入管道*/
}
/*反向函数,输入src,输出des*/
void strv(char * src, char * des)
{
int p[2] = {0, 0}; /*创建一对管道用于读写*/
_pipe(p, _O_BINARY, szSTR);
rev(src, p[1]); /*将输入内容反方向写入管道*/
close(p[1]);/*关闭管道*/
char * s = des; /*将管道内容输出到目标字符串*/
while(!eof(p[0])) {
read(p[0], s++, 1);
}
*s = 0; /*字符串结束标志写入*/
close(p[0]);/*关闭管道*/
}
int main(void)
{
char a[szSTR], b[szSTR];
do {
printf("请输入一个字符串,输入exit结束.\n");
scanf("%s", a);
strv(a, b);
printf("反向存储:[%s]\n", b);
}while(!strstr(a, "exit"));
return 0;
}
温馨提示:答案为网友推荐,仅供参考