0

この関数は、ファイルのポインタとしてパラメータを取得し、すべてのファイルを構造体アナグラムに入れ、別のファイルに書き込むことになっています。現在、データには単語のみが含まれていますが、並べ替えも含まれていると思いますか?

#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <string.h>
#include <errno.h>
#include <ctype.h>
#include "anagrams.h"


void buildDB ( const char *const dbFilename ) 
{
    FILE *dict, *anagramsFile;
    struct anagram a;

    //check if dict and anagram.data are open
    errno=0;
    dict= fopen(dbFilename, "r");

    if(errno!=0) {
        perror(dbFilename);
        exit(1);
    }

    errno=0;

    anagramsFile = fopen(anagramDB,"wb");

    char word[SIZE];
    char *pos;
    int i=0;

    while(fgets(word, SIZE, dict) !=NULL) {

        //get ripe of the '\n'
        pos=strchr(word, '\n');
        *pos = '\0';

        strncpy(a.word,word,sizeof(word));
        //lowercase word
        int j=0;
        while (word[j]) {
            tolower(word[j]);
            j++;
        }

        /* sort array using qsort functions */ 
        qsort(word,strlen(word), 1, charCompare);

        strncpy(a.sorted,word,sizeof(word));

        fwrite(&a,1,sizeof(word),anagramsFile);

        i++;
    }
    fclose(dict);
    fclose(anagramsFile);

}

データ:

ここに画像の説明を入力

4

1 に答える 1

3
char word[SIZE];
...
fwrite(&a,1,sizeof(word),anagramsFile);

sizeof(word)バッファの完全なサイズを返すため、毎回バッファの完全な長さを書き込んでいます。strlen()実際に使用しているバッファの一部のみを書き込むには、または類似のものを使用する必要があります。

于 2012-11-21T04:40:35.700 に答える