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