sizeof和strlen, length的区别

一、sizeof
    sizeof(...)是运算符,而不是一个函数。
    一个简单的例子:
int a;
cout<<sizeof a<<endl;
    在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。
    它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。
    由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。
    实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。
    具体而言,当参数分别如下时,sizeof返回的值表示的含义如下:
    数组——编译时分配的数组空间大小;
    指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4);
    类型——该类型所占的空间大小;
    对象——对象的实际占用空间大小;
    函数——函数的返回类型所占的空间大小。函数的返回类型不能是void

二、strlen
    strlen(...)是函数,要在运行时才能计算。
    参数必须是字符型指针(char*), 且必须是以‘\0‘结尾的。当数组名作为参数传入时,实际上数组就退化成指针了。
int ac[10];
    cout<<sizeof(ac)<<endl;
    cout<<strlen(ac)<<endl;     (ac相当于一个指针,但是strlen只能接受char*类型,所以编译时出错)
    它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符‘\0‘。返回的长度大小不包括‘\0‘。

三 . 补充  strlen和 length的 区别
两者都是求字符串的长度,但strlen( )的参数必须是char* ;而 str.length( )是string类对象str调用的成员函数,所以它们用在不同的地方;

char* ch="asdfsafas";
string str="adfadf";
cout<<str.length();
// cout<<strlen(str);  出错
cout<<strlen(ch);
// cout<<ch.length();出错

strlen()的定义基本如下:

int strlen( const char *str ) //输入参数const

{
 assert( strt != NULL ); //断言字符串地址非0
 int len;
 while( (*str++) != ‘\0‘ ) 
 { 
  len++; 
 } 
 return len;
}

时间: 2024-12-08 22:17:35

sizeof和strlen, length的区别的相关文章

说明sizeof和strlen之间的区别。

解析:由以下几个例子我们说明sizeof和strlen之间的区别.第1个例子: sizeof(ss)结果为4,ss是指向字符串常量的字符指针.sizeof(*ss)结果为1,*ss是第一个字符.第2个例子: sizeof(ss)结果为11,ss是数组,计算到"\0"位置,因此是(10+1).sizeof(*ss)结果为1,*ss是第一个字符.第3个例子: sizeof(ss)结果为100,ss表示在内存中预分配的大小,100×1.strlen(ss)结果为10,它的内部实现是用一个循环

字符串赋值方式理解 sizeof 和strlen的一些区别

#include<stdio.h>#include<string.h>  int main(){ int a,i=0; char ch[10000]; while(scanf("%d",&a)!=EOF&&a!=-1) {  ch[i++]=a; } /* 测试结果 sizeof 测试的是总空间  包括\0  strlen 测试的 是遇到第一个\0之前的长度  */ printf("sizeof计算的长度:%d\n",

C语言中sizeof与strlen区别

C语言中sizeof 与strlen 区别 一.本质区别 sizeof 和strlen 有本质上的区别.sizeof 是C 语言的一种单目运算符,如++.--等,并不是函数,sizeof 的优先级为2 级,比/.% 等3 级运算符优先级高,sizeof 以字节的形式给出操作数的存储空间的大小.而 strlen 是一个函数,是由 C 语言 的标准库提供的.strlen 计算的  是字符串的长度. 二.使用区别 1.sizeof sizeof 的操作数可以是数据类型.函数.变量,表达式使用方式为:

C++Sizeof与Strlen的区别与联系

一.sizeof    sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等.    它的功能是:获得保证能容纳实现所建立的最大对象的字节大小.    由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小.实际上,用sizeof来返回类型以及静态分配的对象.结构或数组所占的空间,返回值跟对象.结构.数组所存储的内容没有关系.    具体而言,当参数分别如下时,sizeof返回的值表示

sizeof与strlen的区别

本文列举了sizeof与strlen的区别,总结一下: sizeof()的结果是一个对象占用的字节数,对于字符串包括字符串结尾的\0. strlen()的结果不包括\0. 下面是源码: #include <stdio.h> int main() { int i = 0; char acNum[] = "12345"; ; char ac3Num[3] = "12"; char *pcNum = "12345" //printf(&qu

C++ sizeof操作符的用法和strlen函数的区别

摘要:本人首先介绍了C++中sizeof操作符的用法和注意事项,其次对比了和strlen的区别和使用,方便大家在写代码的时候查阅,和面试.笔试的时候复习. 目录: sizeof的用法: sizeof和strlen的区别: sizeof的用法: sizeof 是一种单目操作符,而不是函数.sizeof以字节形式给出操作数的存储空间. 操作数可以是一个表达式或在括号内的类型名.操作数的存储空间由操作数的类型决定. char str[]="hello"; char str1[100]; ch

sizeof和strlen的区别

char str[20]="0123456789"; int   a=strlen(str); /*a=10;strlen 计算字符串的长度,以\0'为字符串结束标记. int   b=sizeof(str); /*b=20;sizeof 计算的则是分配的数组str[20] 所占的内存空间的大小,不受里面存储的内容影响 char *str1="absde"; char str2[]="absde";char str3[8]={'a',};char

【转】Sizeof与Strlen的区别与联系

一.sizeof    sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等.    它的功能是:获得保证能容纳实现所建立的最大对象的字节大小.    由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小.实际上,用sizeof来返回类型以及静态分配的对象.结构或数组所占的空间,返回值跟对象.结构.数组所存储的内容没有关系.    具体而言,当参数分别如下时,sizeof返回的值表示

Sizeof与Strlen的区别与联系(转)

一.sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等.    它的功能是:获得保证能容纳实现所建立的最大对象的字节大小.    由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小.实际上,用sizeof来返回类型以及静态分配的对象.结构或数组所占的空间,返回值跟对象.结构.数组所存储的内容没有关系.    具体而言,当参数分别如下时,sizeof返回的值表示的含义