Помогите с помощью Strcmp () с двоичным файлом - PullRequest
0 голосов
/ 31 марта 2011

У меня есть функция void display_a_student(), которая использует два двоичных файла. Во-первых, это binary1.dat, а также index.dat, который содержит смещение каждого учащегося, добавляемого в binary1.dat.

Я пытаюсь использовать индекс, чтобы найти значение смещения для студента, которое вводится пользователем, у меня возникают проблемы с использованием функции strcmp () для сравнения введенного значения с теми значениями, которые хранятся в файле index.dat. .

Любая помощь будет высоко ценится здесь код пока.

void display_a_student()
{
        struct student aStudent;

        char studentNumSearch[11];
        int index=0;
        int found = false;

        fp = fopen("binary1.dat", "a+b");
        fp1 = fopen("index.dat", "a+b");

        printf("\n\nWhich student are you searching for?");
        scanf("%s", studentNumSearch);
        fflush(stdin);

    while(!found && index < 10)
    {
        if(strcmp(studentNumSearch,fp1[index].studentNum)==0)
        {
            found = true;
        }
        index++;
    }

    if (found)
    {
        fseek(fp, fp1[index].offset, SEEK_SET);
        fread(&aStudent,sizeof(struct student),1,fp);
        printf("\n\nThe student name is %s\n",aStudent.firstName);
    }
    else
    {
        printf("\n\nNo such student\n");

    }

    fclose( fp ); /* fclose closes file */
    fclose (fp1);
    getchar();

}

Я уверен, что строка: if (strcmp (studentNumSearch, fp1 [index] .studentNum) == 0) где я иду не так, как я не уверен, как указать на файл при использовании функции strcmp (). - отредактированный код для актуальности.

Ответы [ 2 ]

5 голосов
/ 31 марта 2011

strcmp для сравнения строк.Используйте memcmp для двоичного сравнения.

Основная проблема - ваш доступ к fp1[index].Это не будет работать, когда вы обращаетесь к элементу FILE, который никогда не выделяется.fp1 - это не массив, а указатель FILE.

Вам необходимо использовать fscanf или fread для чтения из файла и fseek для правильного позиционирования в файле на основе индекса и размера каждогозапись.

0 голосов
/ 31 марта 2011

Я не думаю, что вы должны использовать strcmp, вы должны использовать fread для копирования в структуру, а затем использовать strcmp того, что вам нужно.Если вам нужно использовать способ, которым вы это сделали ... вы должны использовать memcmp вместо strcmp, но, как сказал Бенуа, вам нужно знать длину, прежде чем делать cmp.

...