アルファベットを表示する関数(printAlphabet)を再帰処理で呼び出してアルファベットを表示させたいです。
しかし、今、printAlphabet関数の中で、return文(③)が実行されているにもかかわらず、
main関数に戻りません。
よって、無限ループに陥っています。
理由がわかりません。
ご教授くださりますと、嬉しいです。
よろしくお願いいたします。
C
1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4 5int printAlphabet(char *alphabet); 6 7// アルファベットの配列 8static char alhpabet[] = "abcdefghijklmnopqrstuvwxyz"; 9 10int main(void) 11{ 12 int iRet = 0; 13 iRet = printAlphabet(alhpabet); // ① 14 printf("%d\n", iRet); 15 return 0; 16} 17 18int printAlphabet(char *alphabet) 19{ 20 while(*alphabet != '\0'){ 21 printf("%c", *alphabet); 22 printAlphabet(++alphabet); // ④ 23 } 24 printf("\n"); // ② 25 return 0; // ③ 26}
terminal
1Thread 2 hit Breakpoint 1, main () at 問題6.c:10 210 **iRet = printAlphabet(alhpabet);** // ① 3(gdb) next 4 5Thread 2 hit Breakpoint 3, printAlphabet (alphabet=0x10000805a <alhpabet+26> "") 6 at 問題6.c:23 723 printf("\n"); // ② 8(gdb) next 9abcdefghijklmnopqrstuvwxyz 1024 return 0; // ③ ※これが実行された後、④の下に戻る。 11(gdb) print *alphabet 12$1 = 0 '\000' 13(gdb) next 14printAlphabet (alphabet=0x10000805a <alhpabet+26> "") at 問題6.c:21 // // 呼び出し元に戻った。(④) 1518 while(*alphabet != '\0'){ 16(gdb) next 17 18Thread 2 hit Breakpoint 3, printAlphabet (alphabet=0x10000805a <alhpabet+26> "") 19 at 問題6.c:23 2023 printf("\n"); 21(gdb) next 22 2324 return 0; // 呼び出し元のreturn文(③)→★想定では、ここでMain関数に戻って欲しい★ 24(gdb) next 25printAlphabet (alphabet=0x100008059 <alhpabet+25> "z") at 問題6.c:21 26(gdb) 27 28コード
●環境
Mac OS Big Sur
Ver.11.1
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/13 05:55
2021/01/13 06:09 編集