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

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

為什么給數(shù)組賦值賦不上去

為什么給數(shù)組賦值賦不上去

C
慕后端8527005 2018-05-09 17:06:41
#include<stdio.h>#include<string.h>main(){ int n,a[100],i=0,l; scanf("%d",&n); while(n) { a[i]=n%10; n=n/10; i++; } l=strlen(a); printf("%d",l);}
查看完整描述

2 回答

已采納
?
onemoo

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

比如 我定義一個(gè)char 數(shù)組a, 有一個(gè)語(yǔ)句是a[i++]=n%2;n是我輸入的一個(gè)數(shù)...

a[i++]=n%2;? 你是想把 n%2 得到的“數(shù)字的字符”存入 a 中嗎?? 這是不行的!

a 是字符數(shù)組,那么?a[i++] 得到的是 char 類(lèi)型。而 n%2 得到的是整形。 絕大多數(shù)情況下,表示一個(gè)“數(shù)字”的整形值字符型值并不相同。所以這樣賦值后的字符表示的并不是那個(gè)數(shù)字。

你似乎混淆了字符型和數(shù)值類(lèi)型



我用puts無(wú)法打出,printf卻可以,,我一直不明白為什么

puts 的參數(shù)是字符串,它就是簡(jiǎn)單地打印出這個(gè)字符串。你代碼中的 a 是 int 數(shù)組,不是字符數(shù)組,所以無(wú)法正確打印。

而 printf 就復(fù)雜些了,它是用來(lái)進(jìn)行“格式化輸出”的。解釋起來(lái)比較費(fèi)筆墨,我貼個(gè)之前的回答:http://idcbgp.cn/wenda/detail/334835

你看,printf 可以格式化輸出各種類(lèi)型,你說(shuō)“printf卻可以”,我不知道你用的是何種方式:

如果你用 %s 來(lái)打印 a,就是和用 puts 一樣,肯定無(wú)法打印。

如果你碰巧了能夠兼容的格式化指示符,也許可以看到打印出來(lái)。 但是這不能叫“正確”,因?yàn)橹啊跋?char 數(shù)組中存入整形值”的做法完全不符合你的意圖,從根本上就錯(cuò)了! 后面就算能打印也是“碰巧/貌似正確”而已。



關(guān)于你上面說(shuō)的輸入的n不是0,strlen會(huì)返回1是指他將我的組數(shù)看成一個(gè)字符串,后面自動(dòng)添加‘\0’吧

不是這樣的!

strlen 函數(shù)只是進(jìn)行計(jì)數(shù),根本不會(huì)改動(dòng)字符串。 它的計(jì)數(shù)方式很簡(jiǎn)單:一個(gè)個(gè)地?cái)?shù)字符數(shù)組中的字符,直到遇到 '\0' 字符為止。

之前說(shuō)“只要輸入的 n 不是 0,strlen 就會(huì)返回 1”不準(zhǔn)確,應(yīng)該是“只要 n 的個(gè)位數(shù)字不是 0,strlen 就會(huì)返回 1”。原因是:

前面的代碼會(huì)正確地向 int 數(shù)組 a 中存入 n 的各個(gè)位上的數(shù)。那么 a[0] 就是 n 的個(gè)位上的數(shù)字(且不會(huì)是 0)

strlen 要求參數(shù)應(yīng)是字符數(shù)組。雖然錯(cuò)誤地向 strlen 中傳入了 int 數(shù)組,但在運(yùn)行時(shí) strlen 會(huì)強(qiáng)行把 int 數(shù)組當(dāng)作 char 數(shù)組來(lái)計(jì)算。注意:這只是強(qiáng)行解釋內(nèi)存而已。

在內(nèi)存中,char 類(lèi)型占用 1 字節(jié),int 類(lèi)型會(huì)占用更多的字節(jié)(一般是4)。在絕大多數(shù)小端機(jī)器上,int 的字節(jié)序是低地址位在前。a[0] 中是不超過(guò) 9 的非 0 int 值,也就是 a[0] 的這段內(nèi)存中第一個(gè)字節(jié)中的值一定不是 0,第二個(gè)字節(jié)中的一定是 0。strlen 在解釋這段內(nèi)存時(shí)會(huì)把第一字節(jié)當(dāng)作第一個(gè)字符,第二字節(jié)當(dāng)作第二個(gè)字符...? ?'\0' 字符就是值為 0 的字節(jié),這樣 strlen 只數(shù)了一個(gè)字節(jié)就遇到了 '\0' 字符,所以只會(huì)返回 1。

以上就是解釋。如果你看不太明白,就先別管它了。別讓這些把你弄得更糊涂了,現(xiàn)在你只需要明白是你誤用了 strlen 就好了。



我不太明白您將的不給a初始值會(huì)有隱患?這個(gè)隱患是指?

哦,沒(méi)什么。因?yàn)槲也恢滥愫竺鏁?huì)如何操作 a,只是簡(jiǎn)單地提示下:a 中未被賦值的那些元素的值不一定是 0。

查看完整回答
反對(duì) 回復(fù) 2018-05-11
  • 2 回答
  • 0 關(guān)注
  • 3213 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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