天天看点

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

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(int i=0;i<(sizeof(a[i]));i++) //遍历数组a

{

...........

}

for循环的目的是遍历数组a,而从前面分析我们知道,要想获取数组a的大小,无论使用strlen还是sizeof,其参数或者操作数都应该是数组本身,而不是数组中的某个值。因此,需要将for循环中的sizeof(a[i])改为sizeof(a)。

另外,由于输入字符的个数少于数组的大小,使用sizeof获取到的是数组本身的大小即99,而是用strlen()函数获取到的则是数组中元素的个数,从提高程序运算效率的角度出发,for循环的代码应改为

for(int i=0;i<(strlen(a[i]));i++) //遍历数组a

{

...........

}

继续阅读