
C语言返回数组时如何防止数组越界
程序如下:#include<stdio.h>#defineu8unsignedcharu8*inc(u8*p)//将数组的每一个元素加一{u8i=0;for(i=0;i<...
程序如下:
#include <stdio.h>
#define u8 unsigned char
u8 * inc(u8 *p)//将数组的每一个元素加一
{
u8 i=0;
for(i=0;i<8;i++)
{
p[i]++;
}
return p;
}
void main(void)
{
u8 a[8]={0,1,2,3,4,5,6,7};
u8 *b;
u8 i=0;
b=inc(a);
for(i=0;i<8;i++)
{
printf("%d ",b[i]);
}
}
不明之处:主函数声明u8 *b时编译器应该不知道即将要传递数据的长度,那么如果数组a很长,如何避免别的数据被覆盖? 展开
#include <stdio.h>
#define u8 unsigned char
u8 * inc(u8 *p)//将数组的每一个元素加一
{
u8 i=0;
for(i=0;i<8;i++)
{
p[i]++;
}
return p;
}
void main(void)
{
u8 a[8]={0,1,2,3,4,5,6,7};
u8 *b;
u8 i=0;
b=inc(a);
for(i=0;i<8;i++)
{
printf("%d ",b[i]);
}
}
不明之处:主函数声明u8 *b时编译器应该不知道即将要传递数据的长度,那么如果数组a很长,如何避免别的数据被覆盖? 展开
展开全部
inc返回的是数组a第一个元素的地址,也就是说指针b被赋值成数组a第一个元素的地址,也指向数组a,并没有分配新的内存,a和b指向的是同一个数组。如果需要分配新的内存,可以使用malloc。 b = (u8 *) malloc(8 * sizeof(u8)); // 动态分配8个大小为u8的空间
展开全部
数组a不能很长啊
在inc函数中你写了
for(i=0;i<8;i++)
所以a最多只有前8个数据会加一。
在inc函数中你写了
for(i=0;i<8;i++)
所以a最多只有前8个数据会加一。
追问
假如是100甚至更多呢?肯定到某一个地方会出错。
追答
我的意思是,你函数不能这么写,你再将数组的长度,传入这个函数就可以了。
如果一定要将a数组定义得那么大,可是里面却只修改前8个,是不会求改到其他的值的。
但要是将a数组定义小一些,比如3,那么就有可能会覆盖其它数据(数组下标越界了)
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询