C/C++中strlen的用法

您所在的位置:网站首页 width函数头文件 C/C++中strlen的用法

C/C++中strlen的用法

2023-08-22 09:33| 来源: 网络整理| 查看: 265

原文地址:https://blog.csdn.net/smf0504/article/details/51372351/

strlen

strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符’\0’为止,然后返回计数器值。

原型 extern unsigned int strlen(char *s); // 在Visual C++ 6.0中,原型为 size_t strlen(const char *string); // 其中size_t实际上是unsigned int,在VC6.0中可以看到这样的代码 typedef unsigned int size_t;

头文件:string.h(C++ cstring) 格式:strlen (字符数组名) 功能:计算字符串s的(unsigned int型)长度,不包括’\0’在内 说明:返回s的长度,不包括结束符NULL。

实例 #include #include int main(void) { char s[] = "Golden Global View"; std:: cout unsigned char* buf = new unsigned char[len+1] memcpy(buf,p1,len); }

我们能常在用到 sizeof 和 strlen 的时候,通常是计算字符串数组的长度 看了上面的详细解释,发现两者的使用还是有区别的,从这个例子可以看得很清楚:

char str[20]="0123456789"; int a=strlen(str); //a=10; >>>> strlen 计算字符串的长度,以结束符 0x00 为字符串结束。 int b=sizeof(str); //而b=20; >>>> sizeof 计算的则是分配的数组

str[20] 所占的内存空间的大小,不受里面存储的内容改变。 上面是对静态数组处理的结果,如果是对指针,结果就不一样了

char* ss = "0123456789"; sizeof(ss) // 结果 4 ===》ss是指向字符串常量的字符指针,sizeof 获得的是一个指针的之所占的空间,应该是长整型的,所以是4 sizeof(*ss) // 结果 1 ===》*ss是第一个字符 其实就是获得了字符串的第一位'0' 所占的内存空间,是char类型的,占了 1 位 strlen(ss) // = 10 >>>> 如果要获得这个字符串的长度,则一定要使用 strlen

sizeof 返回对象所占用的字节大小 正确 strlen 返回字符个数 正确 在使用sizeof时,有一个很特别的情况,就是数组名到指针蜕变,

char Array[3] = {'0'}; sizeof(Array) == 3; char *p = Array; strlen(p) == 1;//sizeof(p)结果为4

在传递一个数组名到一个函数中时,它会完全退化为一个指针

看完以上你是否很清楚sizeof和strlen的区别了呢?还不明白的话,我们看下面几个例子: 第一个例子

char* ss = "0123456789"; sizeof(ss) 结果 4 ===》ss是指向字符串常量的字符指针 sizeof(*ss) 结果 1 ===》*ss是第一个字符

大部分编译程序 在编译的时候就把sizeof计算过了 是类型或是变量的长度 这就是sizeof(x)可以用来定义数组维数的原因

char str[20]="0123456789"; int a=strlen(str); //a=10; int b=sizeof(str); //而b=20; char ss[] = "0123456789"; sizeof(ss) // 结果 11 ===》ss是数组,计算到\0位置,因此是10+1 sizeof(*ss) // 结果 1 ===》*ss是第一个字符 char ss[100] = "0123456789"; sizeof(ss) // 结果是100 ===》ss表示在内存中的大小 100×1 strlen(ss) // 结果是10 ===》strlen是个函数,内部实现是用一个循环计算到\0之前为止 int ss[100] = "0123456789"; sizeof(ss) // 结果 400 ===》ss表示再内存中的大小 100×4 strlen(ss) // 错误 ===》strlen的参数只能是char* 且必须是以'\0'结尾的 char q[]="abc"; char p[]="a\n"; sizeof(q),sizeof(p),strlen(q),strlen(p); // 结果是 4 3 3 2

第二个例子

class X { int i; int j; char k; }; X x; cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3