私は C の初心者で、まだ基礎を学んでいます。テキスト ファイルを読み取り、単語を個別に分解するアプリケーションを作成しています。私の意図は、各単語が出現する回数を数えることです。
とにかく、以下のコードの最後の do-while ループは正常に実行され、その後クラッシュします。このループは、メモリ アドレスをこの単語 (ポインター) に出力してから、その単語を出力します。これはうまくいきますが、最後の反復でクラッシュします。私の意図は、クラッシュが停止した後でも、このメモリアドレスを単一リンクリストにプッシュすることです。
また、以下の配列サイズについて簡単に言及します。配列がいっぱいになる前にサイズを定義する必要があるため、文字配列などの単語を保持するために必要な正しいサイズを設定する方法をまだ理解していませんが、これを行う方法がわかりません。したがって、それらを 1024 に設定した理由です。
#include<stdio.h>
#include<string.h>
int main (int argc, char **argv) {
FILE * pFile;
int c;
int n = 0;
char *wp;
char wordArray[1024];
char delims[] = " "; // delims spaces in the word array.
char *result = NULL;
result = strtok(wordArray, delims);
char holder[1024];
pFile=fopen (argv[1],"r");
if (pFile == NULL) perror ("Error opening file");
else {
do {
c = fgetc (pFile);
wordArray[n] = c;
n++;
} while (c != EOF);
n = 0;
fclose (pFile);
do {
result = strtok(NULL, delims);
holder[n] = *result; // holder stores the value of 'result', which should be a word.
wp = &holder[n]; // wp points to the address of 'holder' which holds the 'result'.
n++;
printf("Pointer value = %d\n", wp); // Prints the address of holder.
printf("Result is \"%s\"\n", result); // Prints the 'result' which is a word from the array.
//sl_push_front(&wp); // Push address onto stack.
} while (result != NULL);
}
return 0;
}
私が言ったように、悪いプログラム構造を無視してください、私はこれに慣れていません!
ありがとう