c - 指针指向的字符串在哪里/如何存储在文件中?

标签 c visual-c++ file-io

以下代码示例将 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/

相关文章:

visual-studio-2010 - 视觉 C++ 2010 : Including boost in several projects in a solution?

c++ - Visual C++ 类库

c - 如何用C检查闪存设备的坏扇区?

c - 如何使用 dup2 将 stdin 和 stdout 重定向到管道文件描述符?

c - 为什么从 C 打印时 CString 指针值会改变?

c - 不使用 qsort 对 2x3 矩阵进行排序

c - qsort 结构数组降序

c++ - 减少实时绘图数据的有效方法

javascript - HTML input type=file,提交表单前获取图片

linux - Strace——打印内容而不是地址