c - 帮助将 Strcmp() 与二进制文件一起使用

标签 c binaryfiles strcmp

我有一个函数 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() 函数时如何指向文件。 - 编辑相关代码。

最佳答案

strcmp 用于字符串比较。使用 memcmp 进行二进制比较。

主要问题是您对 fp1[index] 的访问。当您访问从未分配的 FILE 元素时,这将不起作用。 fp1 不是一个数组,而是一个 FILE 指针。

您需要使用fscanffread 从文件中读取并使用fseek 根据索引和大小在文件中正确定位每个条目。

关于c - 帮助将 Strcmp() 与二进制文件一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5499708/

相关文章:

c - switch 语句中的变量定义

c - 如果该数据仅在 C 函数返回时可用,如何使用 LLDB 自动捕获输出数据?

mp3 - 了解 Mp3 文件结构

c++ - 在 Visual Studio 中的 C++ 可执行文件中静态包含大型二进制文件

c++ - strcmp 始终为真

检查字符串是否为空,然后继续

c - 怎么了? C

c++ - 构建由 C 和 C++ 文件组成的库

c - 使用 unix 函数在 OSX 下移动/复制文件

c++ - 了解二进制转换