c语言防数组越界问题

由键盘输入数据到数组如何防止数组越界??因为事先不知道使用者会从键盘敲多少数据进去所以我不知道该用那个函数来读取键盘数据到数组才能防止这种情况还有如果要动态分配内存,动态... 由键盘输入数据到数组如何防止数组越界??
因为事先不知道使用者会从键盘敲多少数据进去
所以我不知道该用那个函数来读取键盘数据到数组才能防止这种情况
还有如果要动态分配内存,动态调整内存,以及测数组下标该怎样构思
请高手用代码加注释赐教
谢谢,必定加分!!
展开
 我来答
匿名用户
2009-07-10
展开全部
那你就在定义数组的时候不要规定数组的长度,比如说,直接定义a【】;里面是空的,那就偶看了,或者定义的时候尽量大一点,以防止越界
你说的是侧数组元素的下标吧,我建议你最好用一个for循环,设置i 的初始值为0,执行i++,如果找到了你要寻找的那个元素及a【i】==,就break;及退出当前循环,并输出当前i的值,就是你要找的当前元素的下标
L_o_o_n_i_e
推荐于2016-09-29 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5303万
展开全部
用 gets 作为字符串 读入整一行,再作反复处理。
假定数据用空白号分隔:

char buff[1024];
int i,k,L,N;
int *x;
gets(buff);
L = strlen(buff);
for (i=0;i<L;i++) if (buff[i] != ' ') {k = i; break;};
if (k==0) {N=1;}else {N=0;};
for (i=1;i<L;i++) if (buff[i-1] == ' ' && buff[i] != ' ') N++;
printf("total data number is: %d\n",N);
这里得到 数据总个数
在这里动态分配:
x = (int *) malloc( N * sizeof (int));
接下来,可以用 x[i], i=0,...,N-1
用 sscanf(...,"%d",&x[i]); 从 buff 里读出数据。

不用动态分配,声明一个大数组就是了:
#include <stdio.h>
#include <stdlib.h>

void main()
{
char buff[1024];
int i,k,L,N,m;
int x[100];
gets(buff);
L = strlen(buff);
for (i=0;i<L;i++) if (buff[i] != ' ') {k = i; break;};
if (k==0) {N=1;}else {N=0;};
for (i=1;i<L;i++) if (buff[i-1] == ' ' && buff[i] != ' ') N++;
printf("N=%d\n",N);
if (k==0) {
sscanf(&buff[0],"%d",&x[0]); m=1;
for (i=1;i<L;i++) if (buff[i-1] == ' ' && buff[i] != ' ') {sscanf(&buff[i],"%d",&x[m]);m++;};
} else {
m=0;
for (i=1;i<L;i++) if (buff[i-1] == ' ' && buff[i] != ' ') {
sscanf(&buff[i],"%d",&x[m]);m++;};
}
for (i=0;i<N;i++) printf("%d ",x[i]);
}

----------
输入数据:
12 34 567 8 9
或有开始的空白
白白12 34 567 8 9
输出
N=5
12 34 567 8 9
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_N3
2009-07-08 · 超过24用户采纳过TA的回答
知道答主
回答量:192
采纳率:0%
帮助的人:82.2万
展开全部
scanf控制符里面可以达到效果
具体我忘记了啊
好像是楼下的吧%ms
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2009-07-08
展开全部
输入字符串吗?可以用%ms符号读取。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式