此文提出的問題及答案分析,收錄在我的C語言解惑圈子的第266篇:【第266篇】【C語言基礎】【變量聲明時未賦初始值,然後程序莫名其妙退出,你造嗎?】
同學們可以加我微信:c-poop 進圈查看學習。
有同學問了我一個奇怪的問題,說C程序運行的好好的,突然就退出了!根據這位同學的描述,我寫了一個C程序來重現這個奇怪的場景,C程序代碼如下:
#include<stdio.h>
typedef struct student
{
int NO;//學號
char name[10];//姓名
}STU;
int main()
{
FILE *pFile = NULL;
int index;
STU array[2] = { {1, "wang"}, {2, "zhang"} };
STU shuzu[5];
if( NULL == (pFile = fopen("c:\\student.txt", "wb")) )//以可寫的方式讀取"student.txt"文件
{
printf("打開學生信息文件 %s 失敗!\n", "student.txt");
return -1;
}
fwrite(&array[0], sizeof(STU), 1, pFile);//寫文件
fwrite(&array[1], sizeof(STU), 1, pFile);//寫文件
fclose(pFile);
if( NULL == (pFile = fopen("c:\\student.txt", "rb")) )//以只讀的方式讀取"student.txt"文件
{
printf("打開學生信息文件 %s 失敗!\n", "student.txt");
return -1;
}
while(!feof(pFile))
{
printf("=========\n");
fread(&shuzu[index], sizeof(STU), 1, pFile);
index++;
}
fclose(pFile);
return 0;
}
這個C程序很簡單,先往c:\\student.txt這個文件寫入兩行數據,然後再從c:\\student.txt讀出這兩行數據,並且放在數組shuzu中。讀取函數是fread,可是執行到: fread(&shuzu[index], sizeof(STU), 1, pFile); 這一行時,C程序突然退出了! 運行結果如下:
是不是很奇怪?