.txtファイルから入力を受け取り、charポインタの配列に単語を格納し、単語の長さを平均し、平均を超える単語を出力するCプログラムを作成しようとしています。長さ今私は印刷機能(print_array)を取得しようとしている、私はこれを再帰的にやりたい何らかの理由で、print関数が配列のすべての要素を出力していない場合は、最初の要素を印刷し、毎回最初の文字を削除するだけです。私はここで間違って何をしていますか?乾杯配列を再帰的に出力して奇妙な出力を生成する
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ARRAYLEN 100
#define CHARLEN 79
void *emalloc(size_t s) {
void *result = malloc(s);
if (NULL == result) {
fprintf(stderr, "Memory allocation failed!\n");
exit(EXIT_FAILURE);
}
return result;
}
void print_array(char *a, int n) {
if (n > 0) {
printf("%s\n", &a[0]);
print_array(a + 1, n - 1);
}
}
int main(void) {
char word[CHARLEN];
char *wordlist[ARRAYLEN];
double average;
int num_words;
num_words = 0;
average = 0.0;
while (num_words < ARRAYLEN && 1 == scanf("%79s", word)) {
wordlist[num_words] = emalloc((strlen(word) + 1) * sizeof wordlist[0][0]);
strcpy(wordlist[num_words], word);
average += strlen(word);
num_words++;
}
average = average/num_words;
printf("Average is %.2f\n", average);
print_array(*wordlist, num_words);
return EXIT_SUCCESS;
}
出力 - ここ
Average is 9.71
hello
ello
llo
lo
o
'char word [CHARLEN];'は ""%79s "で小さすぎます。 – chux
また、 'CHARLEN'マクロを使用している場合は、' '%" #CHARLEN "%s" 'を使う方が良いでしょう。 –