Strcpy не работает в пользовательском массиве - PullRequest
1 голос
/ 24 мая 2019

Я пытаюсь присвоить элементу хэш-таблицу [TABLE_SIZE] с входным текстовым файлом. Поэтому я использовал функцию strcpy. Но он не скопировал в массив.

Я пробовал malloc создать массив для записи в него. Но это не сработало, поэтому я сделал переменную типа * element, указывающую массив hash_table. Но все равно не сработал.

    //this is the header file

        typedef struct {
            char key[100];
            char data[100];
        } element;

        element hash_table[TABLE_SIZE];    


        // For caomparison count
        int num_comparison;

        // 파일에서 단어들을 읽어 해시테이블 구성
        int build_dictionary(char *fname);

        int build_dictionary(char *fname) {
            int  i = 0; // num of data
            char key[100], data[200]; 
            FILE *ifp;

                //pointing to the hash_table array
            element* hash_table_p = hash_table;
            hash_table_p = (element*)malloc(sizeof(element));


                //file opening error
            if ((ifp = fopen(fname, "r")) == NULL) {
                printf("No such file ! \n");
                exit(1);
            }
            while (fscanf(ifp, "%s %s", key, data) == 2) { 
                // (key data) assigning to array

                    //i've tried this because hash_table[i].data didn't work
                strcpy(hash_table_p->data, data);
                strcpy(hash_table_p->key, key);

                    strcpy(hash_table[i].data, hash_table_p->data);
                    strcpy(hash_table[i].key, hash_table_p->key);
                i++;

                 //checking if it is well done
                printf("  %s %s \n", hash_table_p->key, hash_table_p->data);
                printf(" %d %s %s \n",i , hash_table[i].data, hash_table[i].key );
             }
                fclose(ifp);
            return(i);

        }
//the input text file went as below
one 하나
two 둘
three 셋
four 넷
five 다섯

Когда я выполнил функцию build_dictionary, только одна с хэш-таблицей strcpy была назначена правильно, а в хэш-таблице ничего не было.

1 Ответ

1 голос
/ 24 мая 2019
        element* hash_table_p = hash_table;
        hash_table_p = (element*)malloc(sizeof(element));

Вы перезаписываете первое назначение (получая новую комнату для hash_table_p, когда звоните malloc), насколько я вижу, вы уже определили размер таблицы, поэтому вам не нужно резервировать больше места. (удалите строку с помощью malloc) и просто увеличивайте положение указателя на каждой итерации (как вы уже делаете).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...