簡體   English   中英

在 C 的二進制文件中搜索字符串

[英]Searching a string in a binary file in C

在這個代碼片段中,我試圖在二進制文件中添加一個字符串。 如果字符串已經存在,則返回錯誤,否則將其添加到 EOF。 我創建了兩個函數,void AddNewTeam(FILE* fp, char* newTeam) 和 int SearchTeam(FILE* fp, char* newTeam),如下所示,但這不起作用。 每次我輸入一個字符串時,它都會添加到 EOF,即使是在二進制文件中。 我認為問題出在 fread function,我試圖打印 fread 返回的值,但它始終為 0。有人可以幫助我理解這段代碼有什么問題以及為什么它不起作用?

void AddNewTeam(FILE* fp, const char* newTeam){
    int found;

    if((fp = fopen("File.dat", "rb")) == NULL){
        fp = fopen("File.dat", "ab");
        fclose(fp);
    }
            
    printf("\tEnter New Team: ");
    scanf("%s", newTeam);
            
    found = SearchTeam(fp, newTeam);
            
    if(found == 0){
        if((fp = fopen("File.dat", "ab"))){
            fwrite(newTeam, sizeof(newTeam), 1, fp);
            printf("\tThe following team has been successfully loaded\n");
            fclose(fp);
        }
    }else if(found == 1){
        printf("\tThis team already exists\n");
        exit(EXIT_FAILURE);
    }
}

int SearchTeam(FILE* fp, const char* newTeam){
    char string[MAX][MAX_LENGTH];
    int counter, result, found = 0;
    if((fp = fopen("File.dat", "rb"))){
        fseek(fp, 0, SEEK_SET);
        for(counter = 0; !feof(fp); counter++){
            if(fread(string[counter], sizeof(string[counter]), 1, fp) == 1){
                result = strcmp(newTeam, string[counter]);
                if(result == 0){
                    found = 1; break;
                }else if(result != 0){
                    found = 0;
                }       
            }
        }
        fclose(fp);
        return found;
    }else if(fp == NULL){
        printf("\tError opening binary file\n");
        exit(EXIT_FAILURE);
    }
}

這是主要的 function 和 function 原型

int SearchTeam(FILE* fp, const char* newTeam);
void AddNewTeam(FILE* fp, const char* newTeam);

int main(void){
    FILE* fp;
    char newTeam[MAX_LENGTH];
    AddNewTeam(fp, newTeam);
    return 0;
}

您沒有正確附加到文件。 搜索代碼要求每個團隊名稱位於MAX_LENGTH字節的塊中。 但是當你寫作時,你會:

fwrite(newTeam, sizeof(newTeam), 1, fp);

newTeam是指針,而不是數組,因此sizeof將是指針的大小,通常為 4 或 8 個字節。 您需要寫入MAX_LENGTH字節,以便與您從文件中讀取的方式相匹配。

fwrite(newTeam, MAX_SIZE, 1, fp);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM