當前位置:首頁 » 編程語言 » 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 瀏覽:718
康師傅控流腳本破解 發布:2025-07-05 13:17:27 瀏覽:246
java的開發流程 發布:2025-07-05 12:45:11 瀏覽:692
怎麼看內存卡配置 發布:2025-07-05 12:29:19 瀏覽:288
訪問學者英文個人簡歷 發布:2025-07-05 12:29:17 瀏覽:837