-1

すべての単語のセットをアルファベットで出力するプログラムをコーディングしようとしています。これは主に、C の文字列とポインターに慣れるためのテストです。再帰的な解決策に落ち着きました。strcat でポインターを使用する際に問題があるようです。ここでセグメンテーション違反が発生する理由はありますか?

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    #define DIM 26

    void print (char *);

    char alphabet[26] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
                     'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
    char word[26];


    int main(void) {
        *word = '\0';
        print(word);
        return EXIT_SUCCESS;
    }

    void print (char *word){
        for (int i = 0; i < DIM; ++i){
            strcat(word, alphabet[i]);
            printf("%c\n", word);
            print(*word);
        }
    }
4

4 に答える 4

0
  • の 2 番目の引数strcat文字列です。したがって、null で終わる配列を送信する必要がありますchar
  • %c形式は をprintf 示しますintword、 へのポインタcharです。
于 2013-05-18T15:56:40.427 に答える
0

ワードの長さは 27 バイトで、最後のバイトをゼロに設定する必要があります。

そうしないと、所有していないメモリに printf がオー​​バーランします。printf は、バイト値がゼロになったときにのみ終了します。

print 関数も自分自身を無期限に呼び出します。これにより、すぐにスタック オーバーフローが発生します。

于 2013-05-18T15:56:47.643 に答える