以下代码示例将 EMPLOYEE 类型的结构变量写入文件,然后使用 fread 将结构读回另一个变量。
int main()
{
EMPLOYEE e1,e2;
FILE *fptr;
e1.emp_id=2240;
e1.emp_name="Ravi Shekhar";
e1.emp_salary=10000;
fptr=fopen("c:\\employee.emp","w+b");
if(fptr == NULL)
{
printf_s("\n\t cannot open file. . .");
return 1;
}
printf_s("%d records written successfully. . .",fwrite(&e1,sizeof(EMPLOYEE),1,fptr));
fseek(fptr,0,SEEK_SET);
fread(&e2,sizeof(EMPLOYEE),1,fptr);
printf_s("\nID = %d\nName = %s\nSalary = %10.2lf",e2.emp_id,e2.emp_name,e2.emp_salary);
fclose(fptr);
_getch();
return 0;
}
我的问题是 e1.emp_name(一个 char* 类型)指向的名称字符串存储在二进制文件中的位置和方式。
谢谢。
最佳答案
它根本不会被存储。
存储的是 char *emp_name
指针的二进制内容 - 静态字符串 "Ravi Shekhar"
的地址。由于您在程序的同一执行 session 期间写入该数据并再次将其读回,因此该指针值仍然有效。 IE。当您从文件中读取它时,它仍然指向它最初指向的同一个静态字符串 "Ravi Shekhar"
。
如果将程序分成两个程序(一个进行写入,另一个进行读取),您会发现“读取器”程序无法再从文件中“读取”字符串,因为它实际上并不存在.您将简单地读取一个二进制指针值,它指向“阅读器”程序中的任何地方。
关于c - 指针指向的字符串在哪里/如何存储在文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6160577/