c語言陣列越界也太難了吧,跨函式越界啥意思?

2021-09-13 02:44:51 字數 2251 閱讀 5637

本來就想做個課程內容的feistel加解密,可是c語言基礎太差,整天遇到陣列越界連續兩個****scanf輸入字串keypaintext時,就發生過,如果沒memset這兩個屬性,後面在makegroupgeneratekey會發生陣列越界。我覺得應該是我沒有給這兩個屬性初始化,所以這兩個屬性的位址可能就是相連的?等同於乙個字串,中間只是相隔乙個』\0』,所以雖然printf時沒輸出,但是如果把』\0』重置後,使用strlen(paintext)訪問時,就會發生陣列越界,因為根據strlen,paintext[strlen]用訪問到了屬於key中的元素。

還有另外乙個越界就是,後面makegroup中的這段,如果沒給』\0』分配空間,則直接給字串content[8]加上『』\0』,就會導致nump會被重置為0,而如果不加』\0』,content輸出時會把nump一連輸出,而content長度strlen居然是9,又是連續分配空間?應該也是沒初始化的問題?

int nump;

//char content[8] 不分配』/0』空間,printf --》 content時, 會把content連著nump作為乙個字串輸出,strlen長度是9!!

char content[9]; //回車符號也分配空間,sizeof,避免越界

nump = strlen§ / sizeof(char) / 8; //輸出正常

for(i=0;i}

這兩段解決完了,又遇到新問題了,就是下面main函式我printf金鑰組這段

類似的,第一次金鑰組generatekey生成的keyspoint輸出正常,而明文分組makegroup生成的p也正常,然而第次輸出keyspoint時,也就是makegroup執行後,printf–》keypoint發生了改變,keypoint變成了亂碼。而當我嘗試初始化

makegroup

中的pcontent

時,第二次輸出的

keyspoint

也發生了改變,居然都是

0*!!為什麼,在makegroup初始化pcontent陣列,會導致keyspoint發生變化。而且,我也試了一下,大概makegrouppcontent重置中,i等於17時,keyspoint的數值就發生變化,由空變成0,這。。。。。初始化的時候出問題,而generatekey中的初始化我也重新設定了,沒效果。。。這是什麼操作。。。。。。暈。。。。。。。這越界是因為指標的問題?有大牛大大幫忙解答一下麼,說一下陣列越界的原理執行,本人基礎太弱,也不知道怎麼搜得到這類知識,希望各位盡情發言,多多關照,謝謝。

以下是關聯到這些問題的部分**,應該可以執行

#include#include#include#includeint main()

char * makegroup(char plaintext[100])

} plength = strlen(plaintext);

b_num = plength % 8;

n_num = 8 - b_num;

g_num = plength / 8 ;

if(b_num != 0)

keyadd[0] = last;

memcpy(keygroup[i],keyadd,16*sizeof(char)); //一維陣列疊加成為二維陣列

keygroup[i][16]='\0'; //密文矩陣

}char (*k)[17];

k = keygroup;

return *k;

}

C語言陣列越界問題

先看下面這段 int i 0 int arr 10 arr 12 5 printf d i 按照通常的理解,陣列arr的訪問越界了,程式應該報錯才對,可是程式不僅沒報錯,反而輸出了5,這說明i的位址和arr 12 的位址是相同的。類似的還有下面的 這段 會形成死迴圈。int i 0 int arr ...

c語言陣列越界的避免方法

1 盡量顯式地指定陣列的邊界 define max 10 int a max 在 c99 標準中,還允許我們使用單個指示符為陣列的兩段 分配 空間,如下面的 所示 int a max 在上面的 a max 陣列中,如果 max 大於 10,陣列中間將用 0 值元素進行填充 填充的個數為 max 10...

關於C語言的陣列賦值和陣列下標越界問題

陣列名就代表著該陣列的首位址,後面的所有元素都可以根據陣列名加上偏移量取到。第乙個小例子 程式設計實現顯示使用者輸入的月份 不考慮閏年 擁有的天數。include define months 12 intmain int month 1 12 dowhile month 1 month 12 處理不...