C言語の問題です。
C言語の問題です。 標準入力からテキストデータ(英数文字)を入力し,英数文字以外であれば,それを単語の区切りとして,一次元の文字型ポインタ配列変数*wordsに英単語を格納する。入力データがなくなったら文字型二次元配列 words に格納した単語を改行して出力するプログラムを作成せよ。文字列自体は,動的メモリ割当を利用して動的メモリ割当のタイミングは,readword() 関数を呼んだ直後で,readword() の戻り値を用いて行うこと。 なお,main() 関数の readword() 関数で用いる文字列については,固定長の文字型配列とし,それから動的メモリに格納すること。プログラムの変更は main() 関数のみに留めること。 下のプログラムを実行してもsegmentation fault(core dumped) となります。改良点を教えていただけると助かります。 メモリを確保する前にreadwordを呼んでいるのが問題のようなのですが、具体的にどこをどのように修正すればよいのでしょうか。 勿論メモリの確保の意味などは理解しています。 #include <stdio.h> #include <string.h> #include <ctype.h> #include <stdlib.h> #define WORDLEN 64 #define WORDNUM 200 #define IN 1 #define OUT 0 int readword(char word[WORDLEN]){ char cc ; int i, flag ; flag = OUT ; i = 0 ; while(!feof(stdin)) { cc = getchar() ; if (isalpha(cc) || isdigit(cc)){ /* you may use "isalnum()" */ flag = IN ; word[i] = cc ; i++ ; if (i >= WORDLEN) return 0 ; } else if (flag == IN){ word[i] = '\0' ; return i ; } } return EOF ; } int main(void){ char *words[WORDNUM]; int i, j ; int lengh ; i = 0 ; while (!feof(stdin)){ lengh = readword(words[i]) ; if (lengh == 0) printf("No more space in readword !!!\n") ; else if (lengh == EOF) printf("End of file!!!\n") ; else { words[i] = (char*)malloc(sizeof(char)*lengh+1); printf("i=%d, \"%s\"=%d\n", i, words[i], lengh) ; i++; } } for (j = 0 ; j < i ; j++) printf ("%d:%s\n", j, words[j]) ; free(words[j]); printf("\nBye....\n") ; return 0 ; }
C言語関連・156閲覧・100