|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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个,就出现越界了。
数组定义的时候需要确定其长度,是为了在内存中开辟相应长度的空间来存放数据
有三种方式:
1 像你说的那样,定义的时候就把长度定义的足够大
2 用c99标准的动态数组,中c99标准下,数组的长度可以用一个变量来定义及初始化
3 用动态内存分配,这将是你以后要学到的,使用malloc及free等函数来动态的分配数组的长度,详细可以百度
|
|