| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 815 人关注过本帖
标题:[求助][经验]
只看楼主 加入收藏
lucis009
Rank: 1
等 级:新手上路
帖 子:181
专家分:0
注 册:2007-5-2
收藏
 问题点数:0 回复次数:11 
[求助][经验]
#include <stdio.h>
#include<stdlib.h>
void write();
void read();
int main()
{
int i;
printf("Enter a number to choice:\n(1)write (2)read\n");
scanf("%d",&i);
if(i==1)
write();
else
read();

return 0;
}
void write()
{
FILE *fp;
char ch[10];
int i=0;
fp=fopen("string.txt","w");
printf("Enter a string:");
getchar();
gets(ch);
printf("\nThe string you want to write to the file is:\n%s",ch);
fputs(ch,fp);
fclose(fp);
}
void read()
{
FILE *fp;
char ch[10];
long i;
fp=fopen("string.txt","rb");
fgets(ch,10,fp);
printf("The data is:%s\n",ch);
i=ftell(fp);
printf("The number:%ld",i);
fclose(fp);
}
问题,我运行这个程序是弹出一个框为以下内容:
16位MS_DOS子系统
NTVDM CPU 遇到无效的指令
CS:1904 IP:2d92 OP:c7 1b 00 00 98 先择关闭终止应用程序.
关闭 忽略

这个程序我能在VC中正常的运行,在TC就出了问题,能告诉一下我是什么原因吗,应该怎么样改?
搜索更多相关主题的帖子: 经验 
2007-07-02 20:51
windflush
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:886
专家分:0
注 册:2007-7-1
收藏
得分:0 
个人初步认为,这个可能和你的输入输出有问题.
你所定义的ch的长度是10.
函数gets是不检查接受的字符串长度的,如果你输入超过的话,就会引起栈越界或段错误。
同理,你读的时候读的十个字符是不已'\0'结尾的,printf语句也不会去检查是否数组越界,会继续访问之后的内容,直到他遇到一个\0为止。
你可以在这方面稍稍检查一下。

C语言相信程序员有处理数组越界的能力,所以他不对数组越界进行检查,而将这个工作交由程序员来进行,所以,我们一定要注意数组越界问题,尤其是char类型的,字符串一定要以/0结尾。

2007-07-02 21:02
lucis009
Rank: 1
等 级:新手上路
帖 子:181
专家分:0
注 册:2007-5-2
收藏
得分:0 
不是你所说的那样,一点运行就弹了一个框为上述的内容,而且,我在VC中运行是正常的,而且当我执行写入数据时不能
自动建立一个文件,就算我在TC目录下建了一个string.txt的文件也写入不了?
2007-07-02 21:22
windflush
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:886
专家分:0
注 册:2007-7-1
收藏
得分:0 
这个我就不清楚了呀。

2007-07-02 21:27
lucis009
Rank: 1
等 级:新手上路
帖 子:181
专家分:0
注 册:2007-5-2
收藏
得分:0 
我的问题解决但不知道是什么原因,我把储存的文件名的后缀变成.cpp就能,把它用.c后缀保存就不能运行
是什么原因,你知道吗?

2007-07-02 21:53
windflush
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:886
专家分:0
注 册:2007-7-1
收藏
得分:0 
汗!你上头说的这个方法是用VC吧?TC是不可能识别C++的啊。
VC的话,这么做的区别就是在于编译器将他当成了C++文件处理的原因。不过我看不出这个和你这个文件有什么相关。

2007-07-02 21:58
lucis009
Rank: 1
等 级:新手上路
帖 子:181
专家分:0
注 册:2007-5-2
收藏
得分:0 
我就不知道为什么,是不是我装了两个编译程造成了冲突?
2007-07-02 22:28
lucis009
Rank: 1
等 级:新手上路
帖 子:181
专家分:0
注 册:2007-5-2
收藏
得分:0 
是不是我装了V的C和TC有冲突?
2007-07-02 22:28
lucis009
Rank: 1
等 级:新手上路
帖 子:181
专家分:0
注 册:2007-5-2
收藏
得分:0 
是不是装了VC和TC有冲突?
2007-07-02 22:30
windflush
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:886
专家分:0
注 册:2007-7-1
收藏
得分:0 
不会是这个问题的,我的机子就装了好多种编译器。

2007-07-03 00:35
快速回复:[求助][经验]
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023973 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved