第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C中字符串的問題

C中字符串的問題

C
月下狂人wzj 2015-07-26 08:18:52
/*? ? 若是? ? strcat(s2,s3);? ? strcpy(s1,s2);? ? 則無法顯示*/代碼這樣的話,應(yīng)該是整個程序都崩潰掉了,因為前面的語句也無法輸出? ? strcat(s2,s3);? ? strcpy(s3,s2);卻可以運行,但是s2的內(nèi)容卻為空,長度為0感覺是s2的空間問題,應(yīng)該是超出了范圍,但是沒有報異常卻可以運行為什么?
查看完整描述

2 回答

?
onemoo

TA貢獻883條經(jīng)驗 獲得超454個贊

你的理解沒有錯,strcat strcpy 這樣的函數(shù)需要第一個參數(shù)處有足夠大的存儲空間來容納后面參數(shù)接入的字符串。

為什么編譯時沒有報錯呢?

從實現(xiàn)角度說,函數(shù)將兩個參數(shù)都視作指向存儲空間的指針,但憑指針并不能判斷出其指向的空間有多大,函數(shù)只能從這兩處空間進行操作,一旦在運行中遇到空間不足,就可能會出問題。


題外話:C語言指針的設(shè)計就是為了靈活,C語言的宗旨是相信程序員,不阻止程序員做他們想做的事。所以就要求程序員對原理有充分的理解,這也是C語言“難”的原因。

其實在現(xiàn)實中,這樣的錯誤也很常見,所謂的“緩沖區(qū)溢出”漏洞多是存儲空間的問題。

查看完整回答
1 反對 回復(fù) 2015-07-26
?
月下狂人wzj

TA貢獻1條經(jīng)驗 獲得超0個贊

厲害,,在請教下, 那為什么將s2復(fù)制給s1就直接崩潰;而s2復(fù)制給s3是直接將s2空間清0呢??

查看完整回答
反對 回復(fù) 2015-07-26
  • 2 回答
  • 0 關(guān)注
  • 1315 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號