[英]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.