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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

?252、若有以下定義和語(yǔ)句: char

?252、若有以下定義和語(yǔ)句: char

C
包小龍蝦 2018-09-10 20:13:35
252、若有以下定義和語(yǔ)句: char *s1="12345",*s2="1234"; printf("%d\n",strlen(strcpy(s1,s2))); 則輸出結(jié)果是?A) 4 B)5 C)9 D)10
查看完整描述

1 回答

已采納
?
onemoo

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊

這題目又錯(cuò)了!

準(zhǔn)確的答案是:這代碼的結(jié)果是未定義的。? 實(shí)際上,這段代碼在運(yùn)行時(shí)極有可能會(huì)崩潰。


原因就出在 strcpy(s1, s2) 這里,這個(gè)函數(shù)會(huì)把 s2 所指的字符串(包括結(jié)尾的null字符)復(fù)制到 s1 所指的字符串中。

但這題目的 s1 所指的是字符串字面量,字符串字面量是不可修改的!按 C 標(biāo)準(zhǔn)的說(shuō)法,就是“修改它的行為是未定義的”。實(shí)踐中,試圖修改字符串字面量有極大的可能引起程序崩潰,所以這段代碼不會(huì)有任何結(jié)果。


我都不想再吐槽了...

其實(shí)呢,我明白這題目要考察的知識(shí)點(diǎn)是什么。? 干脆我把題目修改成正確的吧,然后再講下結(jié)果是啥。

既然題目錯(cuò)在 s1 指向不可修改的字符串了,那就修改成這樣: char s1[] = "12345"? ? 這樣 s1 就是字符數(shù)組了,這次再修改 s1 的內(nèi)容就沒(méi)問(wèn)題了。

那么題目要考的是什么呢?? ?就是 strcpy 這個(gè)函數(shù)會(huì)把 s2 所指的字符串全部復(fù)制過(guò)來(lái)——包括結(jié)尾的null字符——題目想考的點(diǎn)。? ?還有就是 strcpy 會(huì)返回 s1。

s1 中本來(lái)有 6 個(gè)字符: 1 2 3 4 5 '\0'

strcpy 之后,s1 的內(nèi)容成了:1 2 3 4 '\0' '\0'? ? ?也就是原本的 5 被從 s2 中過(guò)來(lái)的 null 字符替換了。

strlen 是用來(lái)計(jì)算字符串中字符個(gè)數(shù)的函數(shù)。參數(shù)是字符指針,當(dāng)然它必須指向某字符串中。函數(shù)計(jì)算字符個(gè)數(shù)的方法就是:從參數(shù)所指的字符串的位置開(kāi)始向后數(shù),直到遇到 null 字符,并且 null 字符不計(jì)算在內(nèi)——題目想考的也有這個(gè)。

這樣 strlen(s1) 最終結(jié)果是 4。

查看完整回答
反對(duì) 回復(fù) 2018-09-11
  • 1 回答
  • 1 關(guān)注
  • 1469 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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