如何求C语言字符串长度(strlen函数和sizeof关键字)
2015-08-12 20:09
621 查看
原文出处:http://blog.csdn.net/kstrwind/article/details/8036555
----------------------------------------------------------------------------------------------------------------------------------------------------------
C语言字符串长度的计算是编程时常用到的,也是求职时必考的一项。
C语言本身不限制字符串的长度,因而程序必须扫描完整个字符串后才能确定字符串的长度。
在程序里,一般会用strlen()函数或sizeof来获取一个字符串的长度,但这2种方法获取的字符串的长度其实是不一样,我们用如下函数进行测试:
从运行结果可以看出,strlen()函数和sizeof求字符串长度需要注意下面几点:
1. strlen函数求得的字符串长度是从字符串第一个元素到第一个'\0'之间元素的个数(如果字符串中间有'\0',则结果不是整个字符串的长度),同时不包括该'\0'
2. sizeof求得的结果是存储该字符串的变量占用的空间大小,因而一定会包括'\0'.若'\0'后还有空余的空间,也会包含到结果里面
解释(与2种求值方式的实现原理有关):
1. strlen()的一种实现就是遍历字符串,遇到'\0'就终止,因而返回的结果是第一个'\0'前字符元素的个数
2. sizeof 常用来求变量占用内存空间的大小,因而它返回的是存储字符串的变量所占用的内存空间大小,用来求字符串的长度,只在特定情况下可行,即字符数组刚好被一个字符串占满。
---------------------------------------------------------------------------------------------------------------------------------------------------------
扩展:
在C语言中,与strlen函数不同的是,sizeof不是一个函数,而是判断数据类型或者表达式长度符的关键字,也可以说是C/C++中的一个操作符(operator),其作用就是返回一个对象或者类型所占的内存字节数。
注意:字节数的计算在程序编译时进行,而不是在程序执行的过程中才计算出来!
数组的sizeof值等于数组所占用的内存字节数,如:
char a1[] = "abc";
int a2[3];
sizeof( a1 ); // 结果为4,字符末尾还存在一个NULL终止符
sizeof( a2 ); // 结果为3*4=12(依赖于int)
那么如何求数组中元素的个数呢?(以下两种方式是等价的)
----------------------------------------------------------------------------------------------------------------------------------------------------------
C语言字符串长度的计算是编程时常用到的,也是求职时必考的一项。
C语言本身不限制字符串的长度,因而程序必须扫描完整个字符串后才能确定字符串的长度。
在程序里,一般会用strlen()函数或sizeof来获取一个字符串的长度,但这2种方法获取的字符串的长度其实是不一样,我们用如下函数进行测试:
void test6() { char s1[20] = "hello world"; char s2[20] = {'h','e','l','l','0',' ','w','o','r','l','d','\0'}; char s3[] = "hello\0 world"; char s4[] = {'h','e','l','l','0','\0',' ','w','o','r','l','d','\0'}; printf("%d\t%d\t%d\t%d\n",strlen(s1),strlen(s2),strlen(s3),strlen(s4)); printf("%d\t%d\t%d\t%d\n",sizeof(s1),sizeof(s2),sizeof(s3),sizeof(s4)); }注意,该函数里面定义了4个字符串,基本数据都是“hello world",但需要注意的是,字符串s1和s2给定了字符串数组的大小为20,然后使用2种方式进行赋值;字符串s3和s4是s1和s2对比的字符串, 区别就是s3和s4字符串中间插入了一个'\0'。该函数运行的结果如下:
从运行结果可以看出,strlen()函数和sizeof求字符串长度需要注意下面几点:
1. strlen函数求得的字符串长度是从字符串第一个元素到第一个'\0'之间元素的个数(如果字符串中间有'\0',则结果不是整个字符串的长度),同时不包括该'\0'
2. sizeof求得的结果是存储该字符串的变量占用的空间大小,因而一定会包括'\0'.若'\0'后还有空余的空间,也会包含到结果里面
解释(与2种求值方式的实现原理有关):
1. strlen()的一种实现就是遍历字符串,遇到'\0'就终止,因而返回的结果是第一个'\0'前字符元素的个数
2. sizeof 常用来求变量占用内存空间的大小,因而它返回的是存储字符串的变量所占用的内存空间大小,用来求字符串的长度,只在特定情况下可行,即字符数组刚好被一个字符串占满。
---------------------------------------------------------------------------------------------------------------------------------------------------------
扩展:
在C语言中,与strlen函数不同的是,sizeof不是一个函数,而是判断数据类型或者表达式长度符的关键字,也可以说是C/C++中的一个操作符(operator),其作用就是返回一个对象或者类型所占的内存字节数。
注意:字节数的计算在程序编译时进行,而不是在程序执行的过程中才计算出来!
数组的sizeof值等于数组所占用的内存字节数,如:
char a1[] = "abc";
int a2[3];
sizeof( a1 ); // 结果为4,字符末尾还存在一个NULL终止符
sizeof( a2 ); // 结果为3*4=12(依赖于int)
那么如何求数组中元素的个数呢?(以下两种方式是等价的)
相关文章推荐
- 详解PHP中strlen和mb_strlen函数的区别
- strlen函数的多种实现方式
- strlen函数的三种实现方式
- 关于sizeof和strlen()那些年我们都迷惑过的问题
- C语言的字符串处理函数strlen()
- C中字符串操作函数
- strlen()函数 数组长度 C C++
- strlen函数的实现 以及出现的问题
- poj1325最小顶点覆盖
- [转载] C++11中的右值引用
- C++ 预处理、const与sizeof 知识点 小结
- Java和C++的主要区别以及Java垃圾回收机制
- C++笔试总结-面试笔试常考题型(二)
- C++怎样跳出双层for循环
- 【C语言经典实例】-使用指针查找数列中的最值
- C++ 控制台版 2048小游戏
- C++ explicit关键字 详解(用于构造函数)
- C与C++区别之处
- c语言const 转为非const的问题
- C++ 对象指针