bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

C語言——字符串的使用-創新互聯

基于string庫函數封裝過程的研究,引發的相關知識探究:

1、關于字符串的使用:
? (1)char str[n] 即棧區分配 n 個字節的的空間,但是在使用的過程中,會出現超出分配的空間,例如:使用 strcpy 函數將一個字符串長度大于 n 的字符串拷貝在數組 str 中,超過 n 個字節的部分會順序存儲在 str+n 的地址后面,即被拷貝的字符串到了新的地址空間 str 仍舊滿足物理上的順序結構;??

創新互聯堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網站設計、成都做網站、外貿網站建設、企業官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯網時代的涿鹿網站設計、移動媒體設計的需求,幫助企業找到有效的互聯網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!
char array[10] = "ab";
	char str[] = "i love my country";
	my_strcpy(array,str);
	printf("%s\n", array);

在調試上述代碼時,可以順利運行 my_strcpy ,但是運行到結尾處 ‘ } ’ 時會報錯?:

運行時檢查失敗#2-在變量‘數組’周圍的堆棧被破壞.

在調試過程中,也是發現定義一個大小為 10 的數組,在沒有數據的位置都是以 ' \0 ' 的形式存在的,而沒有分配的地址空間是以 -52'?' 的形式存在,可見是不合法的;但是在 my_strcpy 的過程中 str 訪問到了沒有被分配的地址空間,編譯器也沒有報錯,仍舊繼續進行訪問;

聯系與反思:

使用 malloc 在堆區申請一塊空間,返回空間的首地址,申請的地址是一塊物理連續的地址空間,那么既然申請的是一塊連續的地址空間,是否也可以越界訪問并擁有可寫權限;

int* space = (int*)malloc(sizeof(int)*10);
	for (int i = 0; i< 15; i++) {
		*(space + i) = i;
	}

在上述代碼中我們可以看到 malloc 申請了一塊大小為 sizeof (int)*10 的地址空間,在調試窗口中可以看到這一塊空間存儲的都是 0 或者隨機數,當我們在 for 循環的中訪問到第十一個 int 空間時,代碼沒有報錯,繼續訪問,也有可寫權限;

從可以知道定義數組可知,編譯器會在代碼結尾處報錯——變量‘數組’周圍的堆棧被破壞,但是在非?malloc 申請的地址空間下操作,編譯器未報錯;

在后續的操作中——獲取未申請的且被修改的空間的地址,用指針指向這一塊地址,依舊是可以進行操作;

(2)關于 char *str 、char str [num] 和char str[ ] 三種字符串的定義方式;

char str [num] 是在棧區分配的空間,棧區空間是由系統分配與釋放;隨著函數結束,系統自己會清除;

char str[ ] 是將存放在靜態存儲區即常量區中的常量拷貝在數組 str 中;即在堆區申請一塊空間進行存儲拷貝過來的常量,也就是說此時 str 也就和上述的str[num] 是等價的;

char *str 是將指針 str 指向常量區的常量地址,而靜態存儲區是不可修改的,只有可讀權限,并沒有修改權限,故而 char *str 可以打印出來,而不能修改其中的值;

你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧

本文名稱:C語言——字符串的使用-創新互聯
當前地址:http://vcdvsql.cn/article24/ddhsce.html

成都網站建設公司_創新互聯,為您提供網站策劃響應式網站定制網站用戶體驗網站設計自適應網站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都網站建設公司