| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1958 人关注过本帖
标题:访问违例(段异常)
只看楼主 加入收藏
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
你试试看撒,只保留 gets(m) 后面的代码,然后你输入 3 个字符试试,看异常不。
2011-06-22 21:02
youngpennyu
Rank: 2
等 级:论坛游民
帖 子:37
专家分:19
注 册:2011-6-13
收藏
得分:0 
以下是引用voidx在2011-6-22 20:55:21的发言:

你可以只要最后的 gets(m) 之后的代码,然后输入一个很长的字符串试试,看看段异常不
 
6 楼所述情况是因为你恰好没有覆盖 fp 的值。
我是故意注释掉str写入fp的部分,因为只有它才发生异常
其它数组同样会向fp写数据,并且同样是超过1个字符(2个字符),没有发生异常
我不懂的地方是同样大小的数组写入fp只有str发生异常

[ 本帖最后由 youngpennyu 于 2011-6-22 21:09 编辑 ]
2011-06-22 21:07
youngpennyu
Rank: 2
等 级:论坛游民
帖 子:37
专家分:19
注 册:2011-6-13
收藏
得分:0 
回复 11楼 voidx
异常的,而且我认为也必定是异常的,输入2个字符时就异常了,但不应该即使是1个字符也异常吗?
2011-06-22 21:08
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
正常通过!

程序代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 1                            // 字符串长度不够。gets()运行就出错了
#define STRMAXLEN 512     //  必须足够长,且gets()不安全

int main(void)
{
    FILE *fp;
    
    char str[STRMAXLEN], name[STRMAXLEN], s[STRMAXLEN], year[STRMAXLEN], wname[STRMAXLEN], wyear[STRMAXLEN], m[STRMAXLEN];
    
    if ((fp = fopen("string.txt", "w")) == NULL) {
        printf("Can't open file!\n");
        exit(1);
    }
    // for (int i; 需要c99支持
    for (int i = 0; i < N; i++) {
        printf("\n输入职工信息:\n");
        printf("职工编号:");
        gets(str);
        fputs(str, fp);
        
        printf("输入姓名:");
        gets(name);
        fputs(name, fp);
        
        printf("输入性别:");
        gets(s);
        fputs(s, fp);
        
        printf("出生年份:");
        gets(year);
        fputs(year, fp);
        
        printf("职称:");
        gets(wname);
        fputs(wname, fp);
        
        printf("任现职年限:");
        gets(wyear);
        fputs(wyear, fp);
        
        printf("实发工资:");
        gets(m);
        fputs(m, fp);
    }
    fclose(fp);
    return 0;
}


[ 本帖最后由 cosdos 于 2011-6-22 21:13 编辑 ]

—>〉Sun〈<—
2011-06-22 21:09
youngpennyu
Rank: 2
等 级:论坛游民
帖 子:37
专家分:19
注 册:2011-6-13
收藏
得分:0 
回复 14楼 cosdos
看来把重点偏了~~~的确是因为数组长度的问题造成的,
但是我发的代码里所有数组长度都为1,按理说每个gets()都会长度不足报错,但是只有str[]报错

把数组长度变大可以解决这个问题,我是知道的,在贴子里我已写明~~~

[ 本帖最后由 youngpennyu 于 2011-6-22 21:15 编辑 ]
2011-06-22 21:13
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 1
int main() {
    FILE *fp;
    char str[N],name[N],s[N],year[N],wname[N],wyear[N],m[N];
    if((fp=fopen("string.txt","w"))==NULL) {
        printf("Can't open file!\n");
        exit(1);
    }
    gets(m);
    fputs(m,fp);
    fclose(fp);
}


你运行这段代码,然后分别输入 123456 和 1234567 看看有什么区别
2011-06-22 21:14
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
楼主你根本就没明白段异常的原因~

[ 本帖最后由 voidx 于 2011-6-22 21:18 编辑 ]
2011-06-22 21:14
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:5 
以下是引用youngpennyu在2011-6-22 21:13:10的发言:

看来把重点偏了~~~的确是因为数组长度的问题造成的,
但是我发的代码里所有数组长度都为1,按理说每个gets()都会长度不足报错,但是只有str[]报错

把数组长度变大可以解决这个问题,我是知道的,在贴子里我已写明~~~



需要自己判断。

—>〉Sun〈<—
2011-06-22 21:16
youngpennyu
Rank: 2
等 级:论坛游民
帖 子:37
专家分:19
注 册:2011-6-13
收藏
得分:0 
回复 17楼 voidx
求解~~~哦~~明白了~~看来误解了~~

[ 本帖最后由 youngpennyu 于 2011-6-22 21:20 编辑 ]
2011-06-22 21:18
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
楼主什么编译器啊

注意代码整齐

—>〉Sun〈<—
2011-06-22 21:18
快速回复:访问违例(段异常)
数据加载中...
 
   



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

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