2016-11-22 4 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'は' int'ではなく 'size_t'を返します。 – 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

関連する問題