繁体   English   中英

如何在C中将字符串递归转换为空字符串

[英]How to reverse a string into a empty string recursively in c

我的作业有这个问题。 我应该将一个字符串递归转换为另一个空字符串。 问题是该函数修改了原本不应该做的源字符串,只是将字符串向后复制到目标字符串。 我不明白为什么会这样...

#include <stdio.h>
#include <string.h>

void
invert(const char *src, char dest[])
{
    if(*src=='\0')
        return;
    else
    {
        invert(src+1, dest);
        dest[strlen(src)-1]=*src;
    }
}

int main(int argc, const char * argv[])
{
    char dest[]="";
    char src[]="";
    printf("write a word: \n");
    scanf("%s", src);
    invert(src, dest);
    dest[strlen(src)]='\0';
    printf("the inversion of the word is: %s\n", dest);
    return 0;
}

例如:写尤利西斯=> sessesU和写琼斯=> seesJ \\ 377

问题在这里:

char dest[]="";
char src[]="";

您要为一个字符分配两次-变量在堆栈上可能彼此相邻,这就是为什么对一个字符进行错误写入会覆盖另一个字符的原因。

您应该为字符串分配足够的存储空间。 如果您确定程序的输入不会超过例如1023个字节,那么两个1k缓冲区应该很好:

char src[1024], dest[1024];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM