2 qq 33447655 qq_33447655 于 2016.01.22 06:30 提问

C语言程序,编译没错,但执行完之后就提示错误。

#include
#include
#include
struct st
{
char name[50];
int age;
}info;
void main(void)
{
struct st s[20];
char FileA[50];
FILE*fp;
if((fp=fopen("e:\students.txt","wt"))=NULL)
{
printf("打开过程中有错,请检查\n");
exit(1);
}
for(int i=0;i<3;i++)
{
scanf("%s%d",info.name,&info.age);
}

for(i=0;i<3;i++)
    if (fwrite(&s[i],sizeof(struct st),1,fp)==0)
    {
        printf("块写入成功");
        exit(0);
    }
    getch();

}

图片我上传不了,它提示的是1.exe已停止工作。然后e盘下有students这个文件。但是里面没有内容。

6个回答

91program
91program   Ds   Rxr 2016.01.22 08:34

s 定义了,没有初始化。它里面的内容是随机的,你对它按字符串操作一般来说会越界。限定大小,当然也不会越界,但是谁都不知道它的内容是什么!

91program
91program 回复qq_33447655: 越界,就可能提错误并终止,但不是一定。
接近 2 年之前 回复
qq_33447655
qq_33447655 越界?如果要越界就得给他赋值超过50个字符才会越界吧?如果越界了就会提示错误并且终止运行?
接近 2 年之前 回复
dangjun2011
dangjun2011   2016.01.22 08:51

你scanf输入的东西保存在info里面,而且给info赋值了三次,并没有给s数组初始化,所以你写进去的东西都是未定义的乱码,当然不成功。

lwluser
lwluser   2016.01.22 09:09

。。。
if((fp=fopen("e:\students.txt","wt"))=NULL) ????你这是干嘛

if((fp=fopen("e:\students.txt","wt"))==NULL)

qq_33447655
qq_33447655 谢谢。我没注意到。改成==后,成功写入。这里又有个问题,即时只有一个=号它也没有提示错误啊。现在就等于fp指针被赋值为NULL空指针。也就是是说它哪里也不指,就原地待着?一个=等于赋值操作了?
接近 2 年之前 回复
qq_33447655
qq_33447655 防错处理。万一没有打开成功。就返回NULL啊
接近 2 年之前 回复
ncbh123
ncbh123   2016.01.22 10:19

FILE*fp ; 他是不是得指向NULL
if((fp=fopen("e:\students.txt","wt"))=NULL) 如果没有返回文件流指针, 你说这个指针会指向哪?

Captain_MXD
Captain_MXD   2016.01.22 11:38

if((fp=fopen("e:\students.txt","wt"))=NULL) 双等号好不啦

John_ToStr
John_ToStr   Rxr 2016.01.23 16:22

文件打开失败,你却误以为打开成功

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!