C - 使用文件作为数据库

时间:2015-02-13 16:27:31

标签: c database file scanf

我正在使用VS2013 我的结构如下:

typedef struct  StuInformation
{
    char studentNumber[100];
    char name[50];
    char sex[10];
    unsigned  short age;
    char m_status[10];
} student;

我希望逐一从用户那里获取信息:

student std;
int RecordSize;
printf("pls insert the student number :\n");
scanf_s("%[^\n]",std.studentNumber);

printf("name : \n");
scanf_s("%[^\n]", std.name);

printf("sex : \n");
scanf_s("%[^\n]", std.sex);

printf("major : \n");
scanf_s("%[^\n]", std.major);

printf("age : \n");
scanf_s("%d", &std.age);

FILE *f;
fopen_s(&f, "student.txt", "a");
RecordSize = sizeof(std);


fseek(f, 0, SEEK_END);
fwrite(&std, RecordSize, 1, f);
fclose(f);

但是我的 scanf_s 似乎存在问题: 访问违规执行位置 我改成了

scanf_s("%[s^\n]", std.email);

因为某处写的是scanf_s必须包含%s ...

还有另一个问题:如何从文件中读取特定记录并将其存储为结构并将其打印到用户,如:

printf("student name is : %s ",std.name)

1 个答案:

答案 0 :(得分:1)

scanf_s中的格式字符串包含%s%S时,该函数需要另一个参数来指示字符串的大小。请参阅https://msdn.microsoft.com/en-us/library/w40768et.aspx

而不是

scanf_s("%[^\n]",std.studentNumber);

您需要使用:

scanf_s("%[^\n]",std.studentNumber, sizeof(std.studentNumber));

需要对函数的其他调用进行类似的更改。