当前位置:首页 » 编程语言 » c语言数组越界

c语言数组越界

发布时间: 2023-01-06 02:25:32

⑴ 什么是c语言数组越界能不能举例子说明一下

比如你定义了一个长度为5的数组:int a[5];
那么你用a[0]到a[4]都不会越界,当你的数组下标大于5时,就会数组越界。

⑵ 关于C语言一维数组越界

#include <stdio.h>
#include<string.h>
#define N 4
main()
{
char a[N],i=0,len,j,t; //a[N]是a[4]数据共4个元素:a[0],a[1],a[2],a[3](下标从0开始)。
for(;i<N;i++) // i < 5,最大为N,将5改为N
{
printf("请输入一个5位数:");
scanf_s("%c",&a[i]); // 当i为4时,,出错
}
len=strlen(a);
if(len==N) //5改为N
{
j=N;
for(i=0;i<N;i++)
{
t=a[i];
a[i]=a[j];
a[j]=t;
j--;
}
}
else
printf("你输入的数不是4位数。"); //如果你想弄成5位数,直接将N改为5: #define N 5
}

⑶ c语言数组越界怎么处理vc6.0

#include<stdio.h>
#include<string.h>
int main()
{
int i,j,n;
printf("The number of country is:");
scanf("%d",&n);
char a[100][100],max[100];
printf("Your country name:\n");
getchar();
for(i=0;i<n;i++)
gets(a[i]);
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
if(strcmp(a[j],a[j+1])>0)
{
strcpy(max,a[j]);
strcpy(a[j],a[j+1]);
strcpy(a[j+1],max);
}
}
for(i=0;i<n+1;i++)
{
puts(a[i]);
}

return 0;
}
你的程序写的不错,不是数组越界而是换行符干扰,加一个getchar吸收一下换行符就好啦

⑷ C语言数组越界

#include"stdio.h"
#include"string.h"
int equal(char* p_c,char c)
{
int a = strlen(p_c);
for(int i = 0;i < a;i++)
{
if(*(p_c + i) == c)
{
return 1;
}
}
return 0;
}
void Union(char* p_c1,char* p_c2)
{
char* p = p_c1;
int a = strlen(p_c1);
int b = strlen(p_c2);
p_c1 = p_c1 + a;
while((*p_c2) != '\0')
{
char temp = *p_c2;
if(equal(p,temp));
else
{
*p_c1 = *p_c2;
p_c1++;
}
p_c2++;
}
*p_c2='\0';
}
void main()
{
char a[100] = "maxuefeng";
puts(a);
char b[20] = "dingfangjie";
puts(b);
Union(a,b);
puts(a);
}
如上,在你的union函数中加个
*p_c2='\0';
这样才算是字符串合并了。
应该用较大的数组,你要确定合并后的长度小于数组长度,这样它才可以运行,输出,否则,就会越界,例如a[10],就不行,因为长度太小了,合并后a[10]放不下字符串。

⑸ C语言数组越界问题

数组越界已经发生了,只是没有立刻提示出来而已
这就是越界的后果
ISO
C说这种代码“行为是未定义的”(the
behavior
is
undefined),也就是说任何后果都是合理的,包括编译时报错、运行时出错、看似正常的运行……

⑹ c语言的数组下标越界问题

c++中,并不会自动检查下标越界问题。
第一个程序中,a[10]=a[9],改变了不属于数组空间的内存单元。这个错误不会在编译和连接中反应出来,而是会一直运行下去,知道出现结果不正确。严重时可能导致死机。
第二个程序也是同样道理,数组a只申请了三个整形的内存空间,越界的部分修改了内存中原来的数据。不过在这里编译会报错。
要保证不破坏其他存储空间中的数据只能说自己注意了。

⑺ c语言数组越界

因为,内存的分配是从高地址到低地址进行的,但一个数组内部元素又是从低到高进行的,所以:
语句序列
int i=0; int a[]={10,30};
的内存分配情况是(地址:低--高):
a[0] a[1] i
而语句序列
int a[]={10,30}; int i=0;
的内存分配情况是(地址:低--高):
i a[0] a[1]
所以,前者越界影响到了i,而后者越界没有影响到i。

⑻ C语言字符数组越界输出

不是这样的,虽然你只申请了10个,
但strlen()测试是以'\0'为数组结束的标志的,所以,当他检测a的区域时,一直到a[9]都没有发现'\0'这个目标,所以,他会继续查找,直到找到他的"爱人\0"方止..sizeof()同理..
所以当你输入12个'w'时,strlen(a)会等于12,sizeof(a)同样也是12,所以会得到12个w..这其实是非法的,虽然能够通过编译,但可以说这是个很危险bug..
而且b数组也存在危险,因为它并没有以'\0'结束,所以,你用strlen(b),测试它时,结果是不确定的,取决于它在b[9]后面的那个字节上找到'\0'字符..

热点内容
随机启动脚本 发布:2025-07-05 16:10:30 浏览:532
微博数据库设计 发布:2025-07-05 15:30:55 浏览:30
linux485 发布:2025-07-05 14:38:28 浏览:310
php用的软件 发布:2025-07-05 14:06:22 浏览:760
没有权限访问计算机 发布:2025-07-05 13:29:11 浏览:436
javaweb开发教程视频教程 发布:2025-07-05 13:24:41 浏览:719
康师傅控流脚本破解 发布:2025-07-05 13:17:27 浏览:246
java的开发流程 发布:2025-07-05 12:45:11 浏览:693
怎么看内存卡配置 发布:2025-07-05 12:29:19 浏览:288
访问学者英文个人简历 发布:2025-07-05 12:29:17 浏览:837