0

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

#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

4

1 回答 1

4

问题在这里:

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

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

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

char src[1024], dest[1024];
于 2012-11-28T21:50:13.083 回答