我想寫一個C程序,它從.txt文件獲取輸入,將這些單詞存儲在一個char指針數組中,平均單詞長度並打印出超出平均值的任何單詞長度。現在我正試圖獲得一個打印函數工作(print_array),我想這樣做遞歸。出於某種原因,打印功能不會打印出數組中的所有元素,而只是打印第一個元素並每次刪除第一個字符。我在這裏做錯了什麼?乾杯遞歸地打印數組,生成奇怪的輸出
#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」'。 –