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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C语言里程序编译无误但运行会弹出程序已停止运行是为什么?
C语言里程序编译无误但运行会弹出程序已停止运行是为什么?原文链接(https://zhidao.baidu.com/question/1178139670043658699.html) 摘要 1. 内存溢出 内存溢出(out of memory)通俗理解就是内存不够,程序所需要的内存远远超出了主机内安装的内存所承受大小,就叫内存溢出。系统会提示内存溢出,有时候会自动关闭软
linux c/c++ 编译没错,运行出错
问题记录- 1.当glibc detected *** free(): invalid next size (normal)出现 http://blog.csdn.net/mociml/article/details/6286311  2. 段错误:smallbin double linked list corrupted http://blog.csdn.net/shaochat/a
我的vc++6.0编译的时候没有问题,运行的时候为什么总是报告一个错误?
# include void main () {   printf("h"); } 编译是没有错误,运行的时候总是报告这个错误--------------Configuration: oop - Win32 Debug-------------------- Linking... LINK : fatal error LNK1104: cannot open file "D
为什么在VC6.0的编译器 编译后 总是出现这样一个错误Error spawning cl.exe .
方法1: 启动VC时不要用图形界面,通过在命令提示符下输入:Msdev /useenv运行(注意啦/前面有个空格).它会强制使系统环境变量全高设置成正确值.而且,只需要使用一次这样的方式运行VC,以后再次通过双击图标的方式启动也不会有问题。 方法2: 使用你的V
C语言代码,求高手解答,为什么没有错误,但是结果不对
#include #include char *cmonth(int month) { char str_month[]={ "Illegal Month" "January" "February" "March" "April" "May" "June" "July" "August" "September" "October" "November"
Eclipse中,代码没错,但有红叉叉
第一种可能: 编译器没有反应过来,可进行如下操作 第一步:ctrl+A-----------全选 第二步:ctrl+X-----------剪切 第三步:ctrl+V-----------粘贴 第四步:ctrl+S-----------保存 一句重新把代码剪切复制下。 如果上述操作无效的话。 那可能就是你的IDE问题了。 它不认为是正确的标签或内容。 第二种:
gcc编译通过,运行却显示“段错误”的解决方法
​第一次在Liunx上(liunx mint 17)使用gcc编译c文件,竟然提示“找不到stdio.h",经过google后发现执行 sudo apt-get install build-essential即可,详见:http://slipper-99933.blog.163.com/blog/static/39954044201021651833785/​。     ​刚学习了柔性数组,照教
随便写个都是这样的 没有警告 为什么在Visual c++6.0上写程序都是有一个错误
在工具里面找有个路径 有错是不可能通过编译执行的 是你的路径没设好 或者选的不是源文件 那就是代码问题 如果有错误 把TC下的程序放在VC上运行要加个头文件#include |||我们的上机环境就是VC++6.0所以 祝你好运 |||支持楼上的 这样别人也好回答 把系统提示的语言贴到上面 如果不是的话 我猜你是这里的问题 编译器不知道一些不要的
Maven项目出现红叉,但是编译和运行都没错
查看到的错误信息如下: Description Resource Path Location Type Project configuration is not up-to-date 解决的方式是:选中项目右键->Maven4MyEclipse(用的是MyEclipse开发工具)-->update project configuration...->选则要更新的项目(即出现红叉的项目)
程序不报错但无法运行
今天早上下午一直在处理这个问题——程序不报错但是无法运行。将主要的业务代码注释后,能显示第一个界面,但取消注释后运行会弹出“停止运行”的框,令我疑惑的是前两个星期都没有任何问题,完全能够运行,请各位指点。 package com.example.store; import android.support.v7.app.ActionBarActivity; import com