1、strlen,sizeof
strlen,sizeof都可以對(duì)字符串長(zhǎng)度進(jìn)行計(jì)算
char test[]= “hello” ? ? ? ? 這種雙引號(hào)字符串后面默認(rèn)是有個(gè) ?空字符
sizeof (test) ? ? ? ? ?為6
strlen (test) ? ? ? ? ? 為5
sizeof:可用于任何變量名、類型名或常量值,當(dāng)用于變量名(不是數(shù)組名)或常量時(shí),不需要加括弧。
strlen:從內(nèi)存的某個(gè)位置(可以是字符串開頭,中間某個(gè)位置,甚至是某個(gè)不確定的內(nèi)存區(qū)域)開始掃描,直到碰到第一個(gè)字符串結(jié)知束符''為止,然后返回計(jì)數(shù)器值。
sizeof 可以用類型做參數(shù),strlen 只能用 char* 做參數(shù),且必須是以 結(jié)尾的。數(shù)組做sizeo的參數(shù)不退化,傳遞給strlen就退化為指針了。
sizeof是在編譯的時(shí)候生效的,strlen是函數(shù),在運(yùn)行時(shí)生效。
2、scanf
scanf是從標(biāo)準(zhǔn)輸入設(shè)備獲取數(shù)據(jù)。以串口為例,使用串口助手發(fā)送數(shù)據(jù)的話,需要勾選發(fā)送新行。
scanf在讀取輸入的時(shí)候,分為多種情況:
一、讀取字符串的時(shí)候(%s)
scanf會(huì)讀取除了空白字符以外的所有字符,并在讀取到第一個(gè)空白字符時(shí)結(jié)束讀取,將空白字符之后的所有字符都暫存在緩沖區(qū)中。除非緩沖區(qū)被刷新或者字符被讀取走,否則將一直停留在緩沖區(qū)中。對(duì)%s來說,回車和空格都是當(dāng)前函數(shù)的結(jié)束字符
二、讀取字符的時(shí)候(%c )
scanf會(huì)讀取所有字符包括空白字符。但是他會(huì)在讀取到第一個(gè)空白字符后結(jié)束讀取。將空白字符之后的所有字符都暫存在緩沖區(qū)中。
三、讀取除了字符和字符串以外的所有輸入的時(shí)候
scanf函數(shù)每次讀取一個(gè)字符,跳過所有的空白字符,直到遇到第一個(gè)非空白字符的時(shí)候才開始讀取。
scanf是一個(gè)阻塞函數(shù),如果沒有獲取到數(shù)據(jù),就會(huì)一直等待這個(gè)要注意。