关于C#:将字符串中的最后一个字符设置为0会导致程序崩溃


Setting last character in a string to 0 causes program crash

这是一个家庭作业,所以它不能使用任何类型的循环来强制递归实践。我也不会更改方法签名或main()函数中的任何内容。

函数的作用是使用递归反向打印字符串。我在这个网站上学习了如何删除字符串中的最后一个字符(从C字符串中删除第一个和最后一个字符)。当我尝试在代码中复制它时,程序在执行时崩溃。这是代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <string.h>

void print_reverse_str(char *str) {
    if (strlen(str) == 1)
        printf("%c", &str[0]);
    else {
        int len = strlen(str);
        int lastIndex = len - 1;
        char endChar = str[lastIndex];
        printf("%c", &endChar);
        str[lastIndex] = 0;
        print_reverse_str(str);
    }
}

int main() {
    print_reverse_str("My string");
    printf("
"
);
    print_reverse_str("!ti tog uoy ,siht daer nac uoy fI");
    printf("
"
);
}


  • 不能更改字符串文字。
  • printf的字符显示。例如,printf("%c", character);,非&character
  • 试试这个。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #include <stdio.h>
    #include <string.h>

    void print_reverse_str(char *str){
        if (*str){
            print_reverse_str(str+1);
            printf("%c", *str);
        }
    }

    int main(){
        print_reverse_str("My string");
        printf("
    "
    );
        print_reverse_str("!ti tog uoy ,siht daer nac uoy fI");
        printf("
    "
    );
    }