0

プログラムをデバッグしていますが、答えが見つからないようです。私のプログラムはファイルを受け取り、単語を動的配列にコピーし、倍数の単語数を保持します。

問題1)私がコンパイルしたものについて、さまざまな入力例を試しました。1 つは「foo bar bat bam」、もう 1 つは「foo foo bar bam」と読みます。最初の出力はその順序ですべての 4 つの単語であり、2 番目の出力は

    foo
    bar     
    bam
    foo bar bam  

これがなぜなのかわかりません。

問題 2) 新しく入力した単語をカウント 1 に初期化しようとすると、セグメンテーション違反が発生します。

arrayOfWords[unique_words].count = 1;

セグメンテーション違反が発生しています。-> を使用してもコンパイルされません。

問題 3) 配列を動的に拡張できないようです。今のところそれらをコメントアウトしましたが、配列を拡大しようとする私の 2 つの戦略を見ることができます。

あなたの助けに心から感謝します!

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define INITIAL_SIZE 10

typedef unsigned int uint;
typedef struct { char * word; int count; } wordType;

int main( void )
{
    wordType *arrayOfWords = (wordType*)malloc(1 * sizeof (wordType) ); 
    wordType *tempArray;
    FILE * inputFile;
    char temp[50];
    uint i;
    uint j;
    uint unique_words;
    uint exists;
    uint wordAdded;
    inputFile = fopen( "input.txt", "r");



    if( inputFile == NULL )
    {
            printf("Error: File could not be opened\n" );
            /*report failure*/
            return 1;
    }
    i = 0;
    unique_words = 0;
    wordAdded = 0;
    while( fscanf( inputFile, "%s", temp) != EOF )
    {


        /*if a word was added, then increase the size by one
        if( wordAdded == 1 )
    {
        tempArray = malloc((unique_words + 1) * sizeof(wordType) );
        memcpy( arrayOfWords, tempArray, unique_words + 1 );
        free( tempArray );
        wordAdded = 0;
    } */

    /*
    if( wordAdded == 1 )
    {
        arrayOfWords = realloc(arrayOfWords, unique_words + 1 );
        wordAdded = 0;
    }*/

    exists = 0;
    for( j = 0; j < unique_words; j++ )
    {
        if( strcmp( arrayOfWords[j].word, temp ) == 0 )
        {
            arrayOfWords[j].count++;
            exists = 1;
        }
    }
    if( exists == 0 )
    {
        arrayOfWords[unique_words].word = malloc(sizeof(char)
                                * (strlen(temp)+1));
        strcpy( arrayOfWords[unique_words].word, temp );
        /*arrayOfWords[unique_words].count = 1; */
        unique_words++;
        wordAdded = 1;
    }
    i++;
}
    printf("unique_words = %d\n", unique_words);
    for( i = 0; i < unique_words; i++ )
    printf("%s\n", arrayOfWords[i].word);


    fclose( inputFile );
   /* for( i = 0; i < size; i++ )
        free( arrayOfWords[0].word );*/
    return 0;
}
4

2 に答える 2