加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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

(2013-05-06 12:26:19)
标签:

杂谈

分类: 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/c5e85199tdc058e7f86b9&690

 

 

 

 

 http://s3/mw690/c5e85199tdc051c7f30e2&690

 

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'为止



0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有