c語(yǔ)言截?cái)喾麧h字的輸入輸出與比較-創(chuàng)新互聯(lián)

先看題:
*
編寫(xiě)一程序P137.C實(shí)現(xiàn)以下功能
通過(guò)鍵盤(pán)輸入兩個(gè)姓名(約定均為漢字且最多4個(gè)漢字),判斷并輸出二者是否同姓。編程可用素材:printf(“請(qǐng)輸入姓名1: “)、printf(“請(qǐng)輸入姓名2: “)、
printf(”\n“…”與“…”同姓。\n”…、printf(”\n“…”與“…”不同姓。\n”…。
程序的運(yùn)行效果應(yīng)類(lèi)似地如圖1和圖2所示,圖1和圖2中的紅色部分是從鍵盤(pán)輸入的內(nèi)容。
請(qǐng)輸入姓名1: 張李秀吉
請(qǐng)輸入姓名2: 張三

為唐河等地區(qū)用戶(hù)提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及唐河網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、唐河網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶(hù)提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶(hù)的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

“張李秀吉”與“張三”同姓。

圖1 程序運(yùn)行效果示例

請(qǐng)輸入姓名1: 李四菊
請(qǐng)輸入姓名2: 張三豐

“李四菊”與“張三豐”不同姓。
*/
此題我看到時(shí)是完全不會(huì)的,經(jīng)過(guò)我百度并詢(xún)問(wèn)大佬,答案及解析如下
#include
int main()
{
char name1[9],name2[9]; //一個(gè)漢字占兩位,四字名字需要8位,此外還需要一位來(lái)填充截?cái)喾?
printf(“name1:%p\nname2:%p\n”,name1,name2);

printf("請(qǐng)輸入姓名2: ");
scanf("%s",name2);		//數(shù)組的本質(zhì)是一塊內(nèi)存,而scanf讀取輸入的時(shí)候只需要知道首地址即可
printf("請(qǐng)輸入姓名1: ");
scanf("%s",name1);
if (name1[0]==name2[0] && name1[1]==name2[1])	//判斷前兩位字符是否一致,即判斷第一個(gè)漢字(姓氏)是否一致。
	printf("\n“%s”與“%s”同姓。\n",name1,name2);
else
	printf("\n“%s”與“%s”不同姓。\n",name1,name2);

return 0;

}
此處的截?cái)喾碅SCII表中的第一個(gè),是一個(gè)空字符(Null),這個(gè)對(duì)應(yīng)的就是 ‘\0’ ,其在A(yíng)SCII碼表中對(duì)應(yīng)的是0。此外,在判斷字符串是否結(jié)束的標(biāo)志時(shí),就是通過(guò)判斷是否遇到了 ‘\0’ ,如果遇到則表示字符串結(jié)束。
說(shuō)了這么多,就有人要問(wèn)了,這跟上面的代碼有什么關(guān)系呢?當(dāng)然有。
如果將申請(qǐng)的name1與name2兩個(gè)數(shù)組中的位數(shù)從9位換成8位,理論是沒(méi)有毛病的,因?yàn)檫@題給的名字里面字?jǐn)?shù)最多也就四個(gè)字,一個(gè)漢字占據(jù)8位,完全夠了。
然而,vc6++對(duì)于連續(xù)聲明的兩個(gè)數(shù)組,它們的內(nèi)存地址是連續(xù)的,scanf又不會(huì)對(duì)讀取的長(zhǎng)度做安全檢查,此時(shí)如果用%p輸出它們的地址,(在兩個(gè)name數(shù)組聲明下面來(lái)一行:printf(“name1:%p\nname2:%p”,name1,name2);),就能找出兩個(gè)數(shù)組的首地址:
name1:0019FF28
name2:0019FF20
顯而易見(jiàn),name2的地址小,name1的地址大,計(jì)算機(jī)在讀取name2的時(shí)候,因?yàn)樽x取的第九個(gè)字符變成了\0,而他后面的第九個(gè)字符就是name1的起始地址,因此,在輸出name1的時(shí)候,直接就沒(méi)有了,因?yàn)榈谝粋€(gè)字符被vc6++編譯器自動(dòng)賦值為“\0”(這好像是vc6++本身的問(wèn)題,c6++對(duì)于連續(xù)聲明的兩個(gè)數(shù)組,它們的內(nèi)存地址是連續(xù)的)。
因此,在申請(qǐng)兩個(gè)數(shù)組時(shí),name1和name2才會(huì)給賦成9位。

你是否還在尋找穩(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)查看詳情吧

網(wǎng)站標(biāo)題:c語(yǔ)言截?cái)喾麧h字的輸入輸出與比較-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://muchs.cn/article22/pggjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷(xiāo)靜態(tài)網(wǎng)站、企業(yè)網(wǎng)站制作、網(wǎng)站改版、外貿(mào)網(wǎng)站建設(shè)、App開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(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)站優(yōu)化排名