3-3 发表于 2017-12-6 15:37:33

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

代码如下:
#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; //一旦名字或者id等于或者超过10个字符,就会越界,这个问题怎么解决?
                char id;
                int kong;      //可以避免越界
                int score;
} array;

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

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

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

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




这是求出学生中成绩最好与最低的结果并显示,在执行过程中出现了越界。   我目前只能通过扩大字符串所占用的空间或者后面加一个空位进行解决,但是原理上还不是非常明白。为什么会出现越界的现象?当输入字符小于10个时,是正常的,但是一旦等于或者超过10个,就出现越界了。

BngThea 发表于 2017-12-6 15:52:31

数组定义的时候需要确定其长度,是为了在内存中开辟相应长度的空间来存放数据
有三种方式:
1 像你说的那样,定义的时候就把长度定义的足够大
2 用c99标准的动态数组,中c99标准下,数组的长度可以用一个变量来定义及初始化
3 用动态内存分配,这将是你以后要学到的,使用malloc及free等函数来动态的分配数组的长度,详细可以百度

好多好多鱼 发表于 2017-12-6 21:30:55

char name; 向系统要了10个字节的空间 你超出10个字节肯定越界任何语言处理不好都一样 。你要么扩大数组要么截断字符串      scanf("%10s%10s%d",&array.name,&array.id,&array.score);

3-3 发表于 2017-12-6 22:02:46

好多好多鱼 发表于 2017-12-6 21:30
char name; 向系统要了10个字节的空间 你超出10个字节肯定越界任何语言处理不好都一样 。你要么扩大 ...

截断字符串 这个方法没有用……

好多好多鱼 发表于 2017-12-6 22:06:37

3-3 发表于 2017-12-6 22:02
截断字符串 这个方法没有用……

你用限定符 10s输入字符串不管几个都会10个 如果 你想动态分配就用malloc但是不是auto的你得自己free
页: [1]
查看完整版本: 关于越界的问题,能不能有什么好的解决方法?