c - 如何在c中递归地将字符串反转为空字符串

标签 c recursion

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

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

例如:写Ulysses => sessesU 并写下 Jones => seesJ\377

最佳答案

问题出在这里:

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

您分配的是一个字符的两倍 - 变量可能在堆栈中彼此相邻,这就是为什么写入一个字符会错误地覆盖另一个字符的内容。

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

char src[1024], dest[1024];

关于c - 如何在c中递归地将字符串反转为空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13614998/

相关文章:

algorithm - 看不懂背包解决办法

java - 递归Java程序中的新对象创建

python - 在对象上调用方法

c - eclipse-cdt 链接器找不到 crt0.o

c++ - 递归地反转字符串链表

c++ - 递归查找二叉树中的最小数

c++ - 无效输入浮点异常的危险是什么?

C 中的计算天数函数

c - 使用 C 中的 RegCopyTree 拒绝访问

python - 计算 JSON 叶节点数