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

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

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

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

在調(diào)試上述代碼時(shí),可以順利運(yùn)行 my_strcpy ,但是運(yùn)行到結(jié)尾處 ‘ } ’ 時(shí)會(huì)報(bào)錯(cuò)?:

運(yùn)行時(shí)檢查失敗#2-在變量‘?dāng)?shù)組’周?chē)亩褩1黄茐?

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

聯(lián)系與反思:

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

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

在上述代碼中我們可以看到 malloc 申請(qǐng)了一塊大小為 sizeof (int)*10 的地址空間,在調(diào)試窗口中可以看到這一塊空間存儲(chǔ)的都是 0 或者隨機(jī)數(shù),當(dāng)我們?cè)?for 循環(huán)的中訪(fǎng)問(wèn)到第十一個(gè) int 空間時(shí),代碼沒(méi)有報(bào)錯(cuò),繼續(xù)訪(fǎng)問(wèn),也有可寫(xiě)權(quán)限;

從可以知道定義數(shù)組可知,編譯器會(huì)在代碼結(jié)尾處報(bào)錯(cuò)——變量‘?dāng)?shù)組’周?chē)亩褩1黄茐?,但是在?malloc 申請(qǐng)的地址空間下操作,編譯器未報(bào)錯(cuò);

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

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

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

char str[ ] 是將存放在靜態(tài)存儲(chǔ)區(qū)即常量區(qū)中的常量拷貝在數(shù)組 str 中;即在堆區(qū)申請(qǐng)一塊空間進(jìn)行存儲(chǔ)拷貝過(guò)來(lái)的常量,也就是說(shuō)此時(shí) str 也就和上述的str[num] 是等價(jià)的;

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

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

本文名稱(chēng):C語(yǔ)言——字符串的使用-創(chuàng)新互聯(lián)
當(dāng)前地址:http://muchs.cn/article24/ddhsce.html

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

廣告

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

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