| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2090 人关注过本帖
标题:C语言文件处理问题!找不到错误原因,求大神帮忙!
只看楼主 加入收藏
libinden71
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2015-12-3
结帖率:63.64%
收藏
已结贴  问题点数:20 回复次数:13 
C语言文件处理问题!找不到错误原因,求大神帮忙!
void paixu(int *p, int n)
{
    int i, j;
    for (i = 0; i < n; i++)
    {
        for (j = 1; j < n-i; j++)
        {
            if (p[j-1] > p[j])
            {
                int tmp = p[j-1];
                p[j-1] = p[j];
                p[j] = tmp;
            }
        }
    }
}

int main()
{
    int len[1];
    int cons = 0;
//    int max[100];

    FILE *ps = fopen("f:\\a.txt", "r");
    while (!feof(ps))
    {
        memset(len, 0, sizeof(len));
        fgets(len, sizeof(int), ps);
        cons++;
    }
    fclose(ps);

    int *max = calloc(cons, sizeof(int));
    cons = 0;

    FILE *p = fopen("f:\\a.txt", "r");
    while (!feof(p))
    {
        memset(len, 0, sizeof(len));
        fgets(len, sizeof(int), p);
        max[cons] = atoi(len);
        cons++;
        
    }
    fclose(p);

    FILE *pi = fopen("f:\\b.txt", "w");
    paixu(&max, cons);
    int i;
    for (i = 0; i < cons; i++)
    {
        memset(len, 0, sizeof(len));
        sprintf(len,"%d\n", max[i]);
        fputs(len, pi);
    }
    fclose(pi);
    free(max);
    return 0;
}
//int max[100];形式 程序无错误! 但是在堆里程序就错误!找不到错误原因求大神帮忙看看!
搜索更多相关主题的帖子: C语言 
2016-01-16 20:19
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:10 
要提供相关文件才好确定问题。你没判断ps和p是否为NULL就往后写就是不规范,一旦没有相关文件或文件只读则程序就崩溃了。

能编个毛线衣吗?
2016-01-16 22:02
libinden71
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2015-12-3
收藏
得分:0 
回复 2楼 wmf2014
原先是有的 这是我删减过后的代码!文件打开和关闭时没问题的!因为我用int max[100] 这样的形式替代掉int *max = calloc(cons, sizeof(int)); 程序是通过的! 但是一改成int *max = calloc(cons, sizeof(int)); 这样的形式就显示错误!vs里调试 显示:
0x647D31AD (ucrtbased.dll)处(位于 测试错误5.exe 中)引发的异常: 0xC0000005: 读取位置 0x81105896 时发生访问冲突。
只知道应该是内存哪里出了问题!但是具体哪里错了 和为什么错 搞不明白!求大神帮帮忙!
2016-01-16 22:53
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你cons的値是多少?

授人以渔,不授人以鱼。
2016-01-16 23:03
libinden71
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2015-12-3
收藏
得分:0 
回复 4楼 TonyDeng
cons的值随机(根据文件里的行数决定cons的值)! 我现在测试的值是12!
2016-01-16 23:10
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
fgets原型:char *fgets(char *buf, int bufsize, FILE *stream);
你对fgets的使用语句是fgets(len, sizeof(int), p);你len的定义是int len[1],明显类型不符,不知道你怎么通过编译的。


能编个毛线衣吗?
2016-01-16 23:10
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你自己檢查一下在執行calloc()時各參數的値到底是多少啦,在那前面一行寫一句printf()就行。

授人以渔,不授人以鱼。
2016-01-16 23:13
libinden71
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2015-12-3
收藏
得分:0 
回复 6楼 wmf2014
类型不匹配 但是确实通过了 而且是对了 文件里的内容是我随机输入的数:
12
65
94
35
16
54
95
...
然后将他们排序 到b.txt 结果是通过的 而且我查看了b.txt 也排序了。用int max[1]和用char max[10]好像没什么差别吧?因为我在下面的代码里已经有了一条atoi进行转化了。
2016-01-16 23:28
libinden71
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2015-12-3
收藏
得分:0 
回复 7楼 TonyDeng
cons的值是12
2016-01-16 23:28
libinden71
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2015-12-3
收藏
得分:0 
回复 7楼 TonyDeng
我不是很明白啊 大神,因为小弟是初学者!calloc前面的值 和calloc分配内存空间有什么关系?一个试堆一个试栈
2016-01-16 23:34
快速回复:C语言文件处理问题!找不到错误原因,求大神帮忙!
数据加载中...
 
   



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

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