練習として、N
の小文字の単語と空白のテキストファイルが与えられた場合、不揃いの配列char *en[N]
が読み込まれるという単純なプログラムを作成しました。データを不揃いの配列にインポート
これは大きな問題なしで動作します。それは、不揃いの配列に入力の最後の単語のみを入力します。
#include<stdio.h>
#include<ctype.h>
int main(int argc, char *argv[]){
int i = 0, j = 0;
char *en[100];
char temp[20];
FILE *p = fopen(argv[1], "r");
char single;
while((single = fgetc(p)) != EOF){
if(!isspace(single)) /* Temporary store a single word */
temp[i++] = single;
else{
temp[i] = '\0';
en[j++] = temp; /* Save stored word in ragged array */
i = 0;
}
}
printf("%s\n", en[0]); /* Return the same than en[1] and en[99] */
printf("%s\n", en[1]);
printf("%s\n", en[99]);
return 0;
}
なぜ入力ファイルの最後まで下がったのか理解できません。私は間違ったアプローチを示唆する大きな問題を検出することができません。
編集:
私のアプローチの背後にある理由は、*char
の配列は、この形式で初期化することができますということでした。その私が誤って上記のエラーに変換しようとした
p[0] = "abc";
推論、 @コーデレドックは華麗に捕まえられた。 1つの言葉と入力の次元が関係する限り、私はそれらに多くの注意を払っていないことを認めます。練習は別のトピックに集中しています。いずれにせよ、あなたの貴重な提案をありがとう!
あなたは文字列のためのスペースを割り当てておらず、それらをコピーしていません。すべて 'temp 'を指している' char * 'の配列を持っています –
' char single; 'は' int single ; 'fgetcによって返される型。 –
'argv [0]'を最初にチェックせずにアクセスすることは決してありません。これにより、期待されるコマンドラインパラメータが実際にユーザによって入力されたことを保証します。 – user3629249