C++中strlen与sizeof处理字符数组和字符指针
来源:互联网 发布:网络词pc是什么意思啊 编辑:程序博客网 时间:2024/06/05 09:07
strlen与sizeof的功能都是获取指定对象的长度。strlen()是一个函数,该函数的格式为
size_t strlen(
const char *str
);
其中,参数类型是const char*,strlen()函数的参数指定了在内存的某个起始位置,从该起始位置到碰到的第一个字符串结束符’\0’为止,期间的内存长度为该函数的返回值;而sizeof()是一个操作符,该操作符的格式为
sizeof unary-expression
sizeof ( type-name )
该操作符的返回值是能够容纳该操作的操作数的字节大小。
1 处理字符数组
1.1 处理未指定元素个数的数组
在如下代码中:
char char_array[] = {'1','2','3','4','5','\0'};
int ret_strlen = strlen(char_array);
int ret_sizeof =sizeof(char_array);
此时,ret_strlen的值是5,而ret_sizeof的值是6。
1.2 处理制定元素个数的数组
在如下代码中,指定的数组元素个数为10:
char char_array[6] = {'\0'};
char_array[0] = '1';
char_array[1] = '2';
char_array[2] = '3';
int ret_strlen = strlen(char_array);
int ret_sizeof =sizeof(char_array);
此时,ret_strlen的值是3,而ret_sizeof的值是6。
2 处理字符指针
在如下代码中
char *pchar ="12345";
int ret_strlen = strlen(pchar);
int ret_sizeof1 =sizeof(pchar);
int ret_sizeof2 =sizeof(*pchar);
此时,ret_strlen的值是5,ret_sizeof1的值是4,ret_sizeof2的值是1。因为sizeof操作符的返回值是操作数是pchar,而pchar的类型是指针,指针类型的长度为4个字节,所以ret_sizeof1的值是4,而*pchar表示pchar指针所指向的第一个字节的内容,其类型为char,所以ret_sizeof2的值是1。
3 实战
在“CSDN”的论坛中,有朋友说下面的代码总是报错:
char a[99] = {0};
//输入数组a中的元素,输入的个数少于99个
for(inti=0;i<(sizeof(a[i]));i++) //遍历数组a
{
...........
}
for循环的目的是遍历数组a,而从前面分析我们知道,要想获取数组a的大小,无论使用strlen还是sizeof,其参数或者操作数都应该是数组本身,而不是数组中的某个值。因此,需要将for循环中的sizeof(a[i])改为sizeof(a)。
另外,由于输入字符的个数少于数组的大小,使用sizeof获取到的是数组本身的大小即99,而是用strlen()函数获取到的则是数组中元素的个数,从提高程序运算效率的角度出发,for循环的代码应改为
for(inti=0;i<(strlen(a[i]));i++) //遍历数组a
{
...........
}
- C++中strlen与sizeof处理字符数组和字符指针
- C中 字符数组和字符串以及strlen 和sizeof
- C、C++字符数组,字符指针,sizeof,strlen总结
- 字符串,字符指针和字符数组的sizeof和strlen
- 关于字符数组,字符指针 strlen和sizeof总结
- 字符数组,字符指针,sizeof,strlen总结
- 字符数组、字符指针;sizeof、strlen
- 字符数组,字符指针,sizeof,strlen总结
- 字符数组,字符指针,sizeof,strlen总结
- 字符数组,字符指针,sizeof,strlen总结
- 字符数组,字符指针,sizeof,strlen总结
- 字符数组和指针的sizeof(),strlen()以及getline()
- C中字符串和字符,strlen和sizeof()
- C++字符数组、字符指针、strlen、sizeof总结
- strlen和sizeof求字符数组长度
- C语言中,当计算字符数组长度时,用sizeof 和strlen 的原理及两者的区别
- C语言中,当计算字符数组长度时,用sizeof 和strlen 的原理及两者的区别
- C语言中,当计算字符数组长度时,用sizeof 和strlen 的原理及两者的区别
- Java开发环境的安装
- spring jar包详解
- Leetcode 141/142 (链表题) Linked List Cycle && Linked List Cycle II
- hash 思想 应用于查找
- 前后台数据验证架构源码级解析
- C++中strlen与sizeof处理字符数组和字符指针
- hibernate延迟加载(get和load的区别)
- 企业级软件质量管控
- HDU 2084:数塔(动态规划)
- Window网络编程之TCP通信
- Codeforces 789 C Functions again (dp)
- C语言下的创建一个数组, 实现函数init()初始化数组、 实现empty()清空数组、 实现reverse()函数完成数组元素的逆置。 要求:自己设计函数的参数,返回值。
- 红宝书 第6章整理——继承部分
- Ubuntu 16.04 下keras安装和mnist测试