strlen()函数的几点注意的地方

标签:
杂谈 |
分类: C语言 |
strlen(const char*)函数是文件头#include "string.h" 下的库函数,其返回类型的是int,里面的参数返回类型是char* ,他的作用是后去字符串的长度,不过在
1.在scanf()键盘终端下输入zhang sen
2.在程序中获取char str[] = "zhang sen";
3.char str[] = {'z','h','a','n','g',' ','s','e','n'};
strlen是计算字符串(以'\0'结尾的字符数组)的函数
字符数据有两种用户,存储字符串和存储字符数组
三种情况不一样
一:第一种
.http://s16/mw690/c5e85199tdc01a7ff4cef&690
可以看到这里是当在终端输入字符串时,在第一空格时候就会被截断,无论后边有多少的的字符串或者空格都不会被获取长度,也就是说当在终端输入空格时候系统就默认为是'\0'结束符号
二:第二种
http://s2/mw690/c5e85199tdc01b38bd531&690
char数组存储字符串,从结果可以知道,数组中有空格但是系统把他当做了一个字符处理,在字符串的末尾系统会自动的添加一个结束符号'\0'
这是什么情况?
http://s14/mw690/c5e85199tdc01e4482b6d&690
这里为什么会出现这种情况?数组只允许输入9个元素,而"zhang sen"就只有9个元素,不是正好吗?为什么会出现13呢?
http://s10/mw690/c5e85199tdc0534544809&690
http://s3/mw690/c5e85199tdc01e43db2f2&690
http://s11/mw690/c5e85199tdc01e458082a&690
这是数组溢出的情况,不过C编译器能够通过,这样是非常危险地
三种情况:
http://s13/mw690/c5e85199tdc020307e17c&690
http://s11/mw690/c5e85199tdc020304420a&690
http://s4/mw690/c5e85199tdc020318fc53&690
这是char数组的字符存储,从结果可以发现,这种情况系统并不会默认的在字符的末尾添加'\0',必须手动的添加一个'\0'才能得到我们想要的结果,如果没有添加,则编译器会一直的寻找知道找到一个结束标志'\0'为止