strlen,sizeof,scanf对字符串计算

1 strlen,sizeof

strlen,sizeof都可以对字符串长度进行计算

char test[]= “hello” 这种双引号字符串后面默认是有个 空字符\0

sizeof (test) 为6

strlen (test) 为5

sizeof:可用于任何变量名、类型名或常量值,当用于变量名(不是数组名)或常量时,不需要加括弧。

strlen:从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结知束符'\0'为止,然后返回计数器值。

sizeof 可以用类型做参数,strlen 只能用 char* 做参数,且必须是以 \0 结尾的。数组做sizeo的参数不退化,传递给strlen就退化为指针了。

sizeof是在编译的时候生效的,strlen是函数,在运行时生效。

2 scanf

scanf是从标准输入设备获取数据。以串口为例,使用串口助手发送数据的话,需要勾选发送新行。

scanf在读取输入的时候,分为多种情况:

一、读取字符串的时候(%s)

scanf会读取除了空白字符以外的所有字符,并在读取到第一个空白字符时结束读取,将空白字符之后的所有字符都暂存在缓冲区中。除非缓冲区被刷新或者字符被读取走,否则将一直停留在缓冲区中。对%s来说,回车和空格都是当前函数的结束字符

二、读取字符的时候(%c )

scanf会读取所有字符包括空白字符。但是他会在读取到第一个空白字符后结束读取。将空白字符之后的所有字符都暂存在缓冲区中。

三、读取除了字符和字符串以外的所有输入的时候

scanf函数每次读取一个字符,跳过所有的空白字符,直到遇到第一个非空白字符的时候才开始读取。

scanf是一个阻塞函数,如果没有获取到数据,就会一直等待这个要注意。