2016-11-22 28 views
1

最后一个字符这是一个家庭作业,所以它不能使用任何类型的循环,以此来迫使递归的做法。我也不会更改方法签名或main()函数中的任何内容。设置在一个字符串为0会导致程序崩溃

功能旨在使用递归打印在反向的字符串。我在这个网站(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"); 
} 
+6

你试图修改字符串文字。 – melpomene

+4

'printf''%c'需要一个'char',而不是一个指向'char'的指针。 – melpomene

+1

'strlen'返回一个'size_t',而不是'int'。 – melpomene

回答

3
  1. 你不能改变一个字符串。
  2. 字符显示printf。例如printf("%c", character);,而不是&字符

试试这个。

#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"); 
} 
+0

就是这样!非常感谢你 :) – MrStove

相关问题