scanf("%d",&s_ptr[i]);虽然字符串格式是 %d,但文件中的结果是 char 值 - 为什么?

scanf("%d",&s_ptr[i]); while string format is %d the result on file is char value - why?

typedef struct info{            //main record
    int *id;
    unsigned char *name;
}student;

void create(){
    student *s_ptr;
    int num_of_student,i;
    FILE *f_ptr;
    f_ptr = fopen("studentdata.txt","w");

    printf("**How many student to record**\n");
    printf("Enter:");
    scanf("%d",&num_of_student);

    s_ptr = (student*)calloc(num_of_student,sizeof(student));  

    for(i=0;i<num_of_student;i++){
        printf("Enter student id: ");
        scanf("%d",&s_ptr[i]);//while string format is %d it prints char value to the file.  

        fflush(stdin);                                          
        printf("Enter student full name: ");
        scanf("%[^\n]",&(s_ptr+i)->name);                          

    fwrite(s_ptr+i,sizeof(struct info),1,f_ptr);
    }


} 

scanf("**%d**",&s_ptr[i]) 打印其在文件中的相对字符值,但在将字符串格式从 %d 更改为 %s 后,它打印出实际的 int 值。为什么?

scanf 与数据写入文件的方式无关。

fwrite将数据写入文件,它写入的数据与计算机内存中存在的数据完全一样。

int 以数字的二进制表示形式存在,精确值(通常为 4 或 8 个字节长)。

如果让 fwrite 将这些字节存储在文件中,然后将它们视为文本,您会看到一些字符,但不是代表数字的十进制数字的字符。

这是因为你的文本编辑器无法知道这些字节属于C语言int类型,需要重新解释才能让你查看。

如果您希望这些字节以人类可读的形式打印到文件中,请改用 fprintf