C编程 – 文件 – fwrite

我有一个关于编程和文件的问题。

while(current!=NULL) { if(current->Id_Doctor!='\0') { current=current->next; id_doc=(current->Id_Doctor); } if(current->Id_Doctor=='\0') { id_doc=id_doc+1; printf("%d", id_doc); break; } } fwrite(&id_doc, sizeof(char), 1, Archivo); 

我不知道为什么,但它不是在名为’Archivo’的二进制文件上写id_doc的值…可能是什么问题? 我添加了一个id_doc的printf,并打印了值。我真的不知道

好的,inheritance人的完整代码(更多):

 struct Medico { int Id_Doctor; int Estado; char Nombre[60]; char Clave_Acceso[20]; char Especialidad[40]; struct Medico *next; }; void Dar_Alta_Med (int estado); void MenuPrincipal(char enta); int main(void) { char enta; MenuPrincipal(enta); } void Dar_Alta_Med(int estado) { struct Medico * head = NULL; struct Medico * prev, *current; char nombre_doc[60], especialida[40], password[20]; int id_doc=0, estado_doc=1; FILE *Archivo; const char *md1="\n\n"; const char *id_doc1=" "; Archivo=fopen("md.dat", "ab+"); fwrite(md1, 1, strlen(md1), Archivo); fwrite(id_doc1, 1, strlen(id_doc1), Archivo); current = (struct Medico *) malloc (sizeof(struct Medico)); current->Id_Doctor=id_doc; while(current!=NULL) { if(current->Id_Doctor!='\0') { current=current->next; id_doc=(current->Id_Doctor); } else { id_doc=id_doc+1; printf("%d", id_doc); break; } } fwrite(&id_doc, sizeof(id_doc), 1, Archivo); printf("Ingresa el nombre del Doctor a dar de alta: "); fclose(Archivo); } 

我死在这里,请帮忙:/

尝试添加fflush(Archivo); 强制写入所有缓冲数据。

此外,这句话: if(current->Id_Doctor=='\0')真的应该是else因为除了'\0'没有别的东西可以

三件事:

  • 确保你的fopen成功。

     Archivo=fopen("md.dat", "ab+"); if (Archivo == NULL) { perror("Failed to open file Archivo"); ... } 
  • 确保你正在检查你的fwrite的成功。

     if (fwrite(&id_doc, sizeof(id_doc), 1, Archivo) < 1) { perror("Failed to write to file Archivo"); ... } 
  • 确保你有一个fclose来正确关闭文件。

     if (fclose(Archivo) != 0) { perror("Failed to close file Archivo"); ... } 

现在您已经发布了完整的代码示例,我想我应该问一下,为简洁起见,是否省略了错误检查? 如果没有,你应该考虑添加它。

如果您希望id_doc的值在输出文件中以显示格式显示,则必须将int转换为字符串(使用snprintf或类似字符串)并将字符串写入输出文件。

 fwrite(&id_doc, sizeof(char), 1, Archivo); 

如果您将id_doc定义为除char之外的任何内容,则会将\ 0写入该文件。

更清洁的将是:

 fwrite(&id_doc, sizeof(id_doc), 1, Archivo); 

如果您的第一个currentId_Doctor那么您将拥有无限循环。

如果在您的最后一个current不是Id_Doctor之后没有current ,则会得到非法指针derefenciation。

对于您的问题:尝试flush()系列。

你传递一个指向四字节INT的指针,但只写一个字节( 错误的字节)!

解决方案:将id_doc声明为“char”,而不是“int”。

您之前已将字符串"\n\n"" "写入文件Archivo ,这似乎表明它根本不是二进制文件,而是XML样式的文件。

在这种情况下,你几乎肯定想要的是:

 fprintf(Archivo, "%d", id_doc);