鱼C论坛

 找回密码
 立即注册
查看: 1730|回复: 4

[已解决]关于越界的问题,能不能有什么好的解决方法?

[复制链接]
发表于 2017-12-6 15:37:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码如下:
#include <stdio.h>
#include <string.h>


int main()
{
        int i, n, max, min, max_num, min_num;
        i = max = max_num = min_num =0;
        min = 101;

        struct student{
                char name[10]; //一旦名字或者id等于或者超过10个字符,就会越界,这个问题怎么解决?
                char id[10];
                int kong;      //可以避免越界
                int score;
} array[10];

        scanf("%d",&n);
        for (i = 0; i < n ; i++)
        {                
                memset(&array[i],0,sizeof(array[i]));
                scanf("%s%s%d",&array[i].name,&array[i].id,&array[i].score);

                if ( max < array[i].score)
                {
                        max = array[i].score;
                        max_num = i;
                }

                if ( min > array[i].score)
                {
                        min = array[i].score;
                        min_num = i;
                }
        }

        printf("%s %s\n",array[max_num].name,array[max_num].id);
        printf("%s %s\n",array[min_num].name,array[min_num].id);
        return 0;
}




这是求出学生中成绩最好与最低的结果并显示,  在执行过程中出现了越界。   我目前只能通过扩大字符串所占用的空间或者后面加一个空位进行解决,但是原理上还不是非常明白。为什么会出现越界的现象?当输入字符小于10个时,是正常的,但是一旦等于或者超过10个,就出现越界了。
最佳答案
2017-12-6 15:52:31
数组定义的时候需要确定其长度,是为了在内存中开辟相应长度的空间来存放数据
有三种方式:
1 像你说的那样,定义的时候就把长度定义的足够大
2 用c99标准的动态数组,中c99标准下,数组的长度可以用一个变量来定义及初始化
3 用动态内存分配,这将是你以后要学到的,使用malloc及free等函数来动态的分配数组的长度,详细可以百度
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-12-6 15:52:31 | 显示全部楼层    本楼为最佳答案   
数组定义的时候需要确定其长度,是为了在内存中开辟相应长度的空间来存放数据
有三种方式:
1 像你说的那样,定义的时候就把长度定义的足够大
2 用c99标准的动态数组,中c99标准下,数组的长度可以用一个变量来定义及初始化
3 用动态内存分配,这将是你以后要学到的,使用malloc及free等函数来动态的分配数组的长度,详细可以百度
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-6 21:30:55 | 显示全部楼层
char name[10]; 向系统要了10个字节的空间 你超出10个字节肯定越界  任何语言处理不好都一样 。你要么扩大数组  要么截断字符串      scanf("%10s%10s%d",&array.name,&array.id,&array.score);  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-6 22:02:46 | 显示全部楼层
好多好多鱼 发表于 2017-12-6 21:30
char name[10]; 向系统要了10个字节的空间 你超出10个字节肯定越界  任何语言处理不好都一样 。你要么扩大 ...

截断字符串 这个方法没有用……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-6 22:06:37 | 显示全部楼层
3-3 发表于 2017-12-6 22:02
截断字符串 这个方法没有用……

你用限定符 10s  输入字符串不管几个都会10个 如果 你想动态分配  就用malloc  但是不是auto的  你得自己free
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-1 03:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表