C++中strlen与sizeof处理字符数组和字符指针

来源:互联网 发布:网络词pc是什么意思啊 编辑:程序博客网 时间:2024/06/05 09:07

strlensizeof的功能都是获取指定对象的长度。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的值是5ret_sizeof1的值是4ret_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
{

...........

}

 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 8个月的宝宝发烧怎么办 八个月大的宝宝拉肚子怎么办 9孩子上课坐不住怎么办 3岁宝宝太皮怎么办 4岁的宝宝多动症怎么办 小孩好动注意力不集中怎么办 乐扣加热变形了怎么办 3岁宝宝咳嗽厉害怎么办 六个月婴儿呕奶怎么办 刚出生婴儿呕奶怎么办 宝宝拉颗粒便便怎么办 奶水不够宝宝又不吃奶粉怎么办 一岁突然不吃饭怎么办 母乳不够吃宝宝不吃奶粉怎么办 八个月不吃辅食怎么办 孩子长得太快怎么办 反复发烧到39度怎么办 儿童发烧到39度怎么办 7岁儿童发烧40度怎么办 7岁反复发烧39度怎么办 宝宝烧到39.5度怎么办 3岁儿童发烧39度怎么办 孩子发高烧怎么办39度5 3岁宝宝不吃水果怎么办 2岁宝宝不吃水果怎么办 4岁宝宝不吃水果怎么办 过早竖抱婴儿了怎么办 3个月宝宝认生怎么办 10天婴儿不拉屎怎么办 3个月宝宝不吃奶粉怎么办 婴儿吃青菜吃多怎么办 2月宝宝消化不好怎么办 吃母乳的宝宝便秘怎么办 婴儿拉肚子怎么办大便绿色的 10个月宝宝睡眠不好怎么办 婴幼儿消化不良引起的腹泻怎么办 小孩晚上睡觉不盖被子怎么办 镜子对着房间门怎么办 高血压引起的眼底出血怎么办 墙砖颜色选深了怎么办 墙砖颜色太深怎么办