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

时间:2016-11-22 22:55:35

标签: c

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

该函数旨在使用递归来反向打印字符串。我在这个网站(Strip first and last character from C string)上学到了如何删除字符串中的最后一个字符。当我尝试在我的代码中重现它时,程序在执行时崩溃。这是代码:

#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("\n");
    print_reverse_str("!ti tog uoy ,siht daer nac uoy fI");
    printf("\n");
}

1 个答案:

答案 0 :(得分:3)

  1. 您无法更改字符串文字。
  2. 使用printf进行字符显示。 E.g printf("%c", character);,而不是&amp; character
  3. 试试这个。

    #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("\n");
        print_reverse_str("!ti tog uoy ,siht daer nac uoy fI");
        printf("\n");
    }