1

特定の単語を配列 (**valid_words) へのポインターに保存しようとしていますが、理解できない問題が発生しています。以下は私が利用しようとしている関数です。最終結果は、iline と dline が等しい場合の条件に従って、valid_words にすべての有効な単語を含めることです。

void CheckFile(char *input_file, char *dictionary_file, char *output_file, char **valid_words)
{
    /* Open files as read or append */
    FILE *input, *dictionary, *output;
    input = fopen(input_file, "r");
    dictionary = fopen(dictionary_file, "r");
    output = fopen(output_file,"a");
    int word_count = 0;

    /* Read from files */
    if (input != NULL && dictionary!= NULL)
    {   
        char *iline = malloc(MAXSIZE*sizeof(char)); 
        char *dline = malloc(MAXSIZE*sizeof(char));

        while (fgets (iline, sizeof iline, input) != NULL)
        {   
            while (fgets (dline, sizeof dline, dictionary) != NULL)
            {   
                trimwhitespace(iline);
                trimwhitespace(dline);
                if (strcasecmp(iline, dline) == 0 ) 
                {   
                    fprintf(output, "%s\n",iline);
                    valid_words[word_count] = iline;
                    printf("Word Count: %d\n", word_count);
                    printf("At Zero: %s\n", valid_words[0]);
                    printf("Valid Word: %s\n", valid_words[word_count]);
                    printf("Actual Word: %s\n", iline);
                    word_count++;
                }   

            }   
            rewind(dictionary);
        }   

        fclose(input);
        fclose(dictionary);
        fclose(output);
        free(iline);
        free(dline);
    }   
    else
    {   
        printf("An error has occured\n");
    }   
}

私が得ている現在の出力は

Word Count: 0
At Zero: miles
Valid Word: miles
Actual Word: miles
Word Count: 1
At Zero: limes
Valid Word: limes
Actual Word: limes
Word Count: 2
At Zero: smile
Valid Word: smile
Actual Word: smile
Word Count: 3
At Zero: slime
Valid Word: slime
Actual Word: slime

At Zero: は常に「マイル」を出力することを期待していますが、これは起こっていません。関数が呼び出された後、valid_words[i] を出力すると、何も出力されません。誰かが私を助けてくれれば、本当に感謝しています。どんな批判にも非常にオープンです。完全な実装はhttp://pastebin.com/TjxLRVaCで確認でき ます。ありがとうございます。

4

1 に答える 1

1

うまくいかない理由の答えは -

valid_words[word_count] = iline;

strcpyの要素が文字valid_wordsまで保持できることを確認した後に使用するか、挿入する要素の最初の (実際には 0 番目の) 文字が であることを確認した後に( NB: not ) を使用する必要があります。MAXSIZEstrncatstrncpyvalid_words'\0'

いくつかの観察:

MAXSIZE#defined定数であると仮定すると、これはより良いです-

char iline[MAXSIZE]; 
char dline[MAXSIZE;

あなたが持っているmalloc呼び出しよりも(ちなみに、 sizeof(char) は定義上1つです。)

同様に、 to の最後のパラメータを変更した方がよいでしょCheckFilechar valid_words[][MAXSIZE](したがって、 へのすべての呼び出しで引数を変更しますCheckFile)。

お役に立てれば。

于 2013-01-09T23:42:08.180 に答える