簡體   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