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[]="";

1文字の2倍を割り当てています-変数はおそらくスタック上で隣り合っているため、一方に書き込むと別の内容が誤って上書きされます。

文字列に十分なストレージを割り当てる必要があります。プログラムの入力がたとえば 1023 バイトを超えないことが確実な場合は、2 つの 1k バッファが適しているはずです。

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