`
anson_xu
  • 浏览: 514611 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类

strlen与sizeof的区别

 
阅读更多
strlen与sizeof的区别



最后一个int a[3] = {1, 2, 3};
在32位机上,sizeof a 应该等于4×3 = 12吧。

sizeof 运算符是用来求内存容量字节的大小的。而strlen是用来求字符串实际长度的。如果int *p = a; sizeof(p)应该等于4咯。




1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。
该类型保证能容纳实现所建立的最大对象的字节大小。

2.sizeof是算符,strlen是函数。

3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。

4.数组做sizeof的参数不退化,传递给strlen就退化为指针了。

5.大部分编译程序在编译的时候就把sizeof计算过了 是类型或是变量的长度这就是sizeof(x)可以用来定义数组维数的原因
char str[20]="0123456789";//str是编译期大小已经固定的数组
int a=strlen(str); //a=10;//strlen()在运行起确定
int b=sizeof(str); //而b=20;//sizeof()在编译期确定

6.strlen的结果要在运行的时候才能计算出来,是用来计算字符串的实际长度,不是类型占内存的大小。

7.sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。
char c;
sizeof c;//变量名可以不加括弧

8.当适用了于一个结构类型时或变量, sizeof 返回实际的大小,
当适用一静态地空间数组, sizeof 归还全部数组的尺寸。
sizeof 操作符不能返回动态地被分派了的数组或外部的数组的尺寸

9.数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址,
如:
fun(char [8])
fun(char [])
都等价于 fun(char *)
在C++里参数传递数组永远都是传递指向数组首元素的指针,编译器不知道数组的大小
如果想在函数内知道数组的大小, 需要这样做:
进入函数后用memcpy拷贝出来,长度由另一个形参传进去
fun(unsiged char *p1, int len)
{
  unsigned char* buf = new unsigned char[len+1]
  memcpy(buf, p1, len);
}

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

har str[11]="0123456789";//注意这里str大小因该大于等于11,应考虑'\0'在内,否则编译器会报错
int a=strlen(str); //a=10; >>>> strlen 计算字符串的长度,以结束符 0x00 为字符串结束。
int b=sizeof(str); //而b=11; >>>> sizeof 计算的则是分配的数组 str[11] 所占的内存空间的大小,不受里面存储的内容改变。 

上面是对静态数组处理的结果,如果是对指针,结果就不一样了

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

另外,下面的方法可以用于确定该静态数组可以容纳元素的个数:
int a[3]={1,2,3};
cout << sizeof a/sizeof ( typeid( a[0] ).name() );
分享到:
评论

相关推荐

    有关strlen和sizeof的归纳与总结

    - **`sizeof`与`strlen`的区别:** - `sizeof`是操作符,用于获取类型或对象的大小; - `strlen`是函数,用于获取字符串的长度(不包含终止符`\0`)。 - **应用场景:** - 使用`sizeof`时要注意它适用于获取类型...

    区别strlen和sizeof

    strlen和sizeof的区别

    strlen 和 sizeof 的使用

    strlen和sizeof的区别 strlen 和 sizeof 的使用

    sizeof与strlen区别

    ### sizeof与strlen的区别详解 #### 一、概述 在C/C++编程语言中,`sizeof`和`strlen`是两个非常重要的概念,它们都用于获取有关数据的信息,但各自的作用和应用场景有所不同。本文将详细介绍这两个操作符/函数的...

    strlen和sizeof的区别.md

    strlen和sizeof的区别

    sizeof和strlen区别

    `sizeof`和`strlen`的主要区别在于: 1. 计算时机:`sizeof`是编译时操作,而`strlen`是运行时函数。 2. 应用范围:`sizeof`可应用于任何类型和变量,包括基本类型、结构体、数组等;`strlen`仅适用于C风格字符串。...

    strlen与sizeof

    《strlen与sizeof的区别详解》 在C/C++编程中,strlen和sizeof是两个常见的操作符,它们虽然在一定程度上都涉及到内存的大小,但其作用和使用场景却有着明显的差异。 首先,`sizeof`是一个运算符,其结果类型是`...

    C、C++ 语言中的函数strlen和sizeof的区别

    strlen和sizeof的区别

    c和c++中的strlen和sizeof的区别解读.txt

    strlen和sizeof的区别

    strlen和sizeof的区别和代码示例

    在实际编程中,理解`strlen`和`sizeof`的区别至关重要,因为错误地使用它们可能导致程序行为不符合预期。例如,如果你需要获取字符串的实际字符数量(不包括`\0`),应使用`strlen`;而如果你需要知道内存中分配了...

    【C++】 strlen与sizeof计算char* 与char数组(转载记录) - toby1123yjh的博客 - CSDN

    在C++编程语言中,`strlen` 和 `sizeof` 是两个非常重要的运算符,它们用于处理字符串和数组。本文将详细解析这两个运算符在处理 `char*`(字符指针)和 `char` 数组时的区别和应用。 1. `strlen` 函数 `strlen` 是...

    sizeof与strlen区别详解

    sizeof与strlen的区别详解 在C语言中,字符串处理问题是最常见的问题之一,特别是字符串长度的计算。sizeof和strlen是两个常用的操作符和函数,但是它们的使用场景和返回结果却有很大的区别。本文将详细介绍sizeof...

    sizeof和strlen的区别

    在C/C++编程语言中,`sizeof`和`strlen`是两个非常重要的概念,它们各自服务于不同的目的。了解它们的区别对于编写高效且无错误的代码至关重要...理解`sizeof`和`strlen`的区别能够帮助我们编写更加准确和高效的代码。

    Sizeof与Strlen的区别与联系

    Sizeof和Strlen是C++中用于处理内存和字符串长度的两个重要工具,它们有着显著的区别和特定的应用场景。 一、Sizeof Sizeof是一个运算符,它在编译时进行计算,返回值类型为size_t,即无符号整型,能够容纳系统中...

    Sizeof与Strlen的区别与联系.pdf

    【Sizeof与Strlen的区别与联系】 Sizeof和Strlen是C/C++编程语言中用于获取数据大小和字符串长度的两个重要工具,但它们的作用和使用场景有所不同。 1. **Sizeof运算符**: - Sizeof是一个运算符,它在编译时计算...

    Sizeof运算符与Strlen函数的区别与联系.docx

    《Sizeof运算符与Strlen函数的区别与联系》 在编程领域,理解和掌握`sizeof`运算符和`strlen`函数的使用是至关重要的,因为它们分别处理不同类型的问题,尤其是在处理字符串和内存分配时。以下是对这两个概念的详细...

Global site tag (gtag.js) - Google Analytics