C語言——字符串的使用-創(chuàng)新互聯(lián)

基于string庫函數(shù)封裝過程的研究,引發(fā)的相關知識探究:

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

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

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

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

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

聯(lián)系與反思:

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

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

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

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

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

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

char str [num] 是在棧區(qū)分配的空間,棧區(qū)空間是由系統(tǒng)分配與釋放;隨著函數(shù)結束,系統(tǒng)自己會清除;

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

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

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

本文名稱:C語言——字符串的使用-創(chuàng)新互聯(lián)
當前地址:http://bm7419.com/article24/ddhsce.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、響應式網(wǎng)站定制網(wǎng)站、用戶體驗、網(wǎng)站設計、自適應網(wǎng)站

廣告

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

成都網(wǎng)站建設公司