C++(C)中Sizeof与Strlen的区别

C++(C)中Sizeof与Strlen的区别

一、知识总结:

1、sizeof

(1)、使用方法

sizeof为运算符

sizeof unary-expression

sizeof ( type-name )

(2)、运行阶段

sizeof在编译时计算。

(3)、返回值

sizeof:获取对象所分配的字节大小。

用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。

具体而言,当参数分别如下时,sizeof返回的值表示的含义如下:

数组——编译时分配的数组空间大小;

指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4);

类型——该类型所占的空间大小;

对象——对象的实际占用空间大小;

函数——函数的返回类型所占的空间大小。函数的返回类型不能是void。

2、strlen

(1)、使用方法

strlen为函数

size_t strlen( const char *string );  // 返回值为size_t ,即unsignedint

(2)、运行阶段

strlen在运行阶段阶段。

Libraries

Allversions of the C run-time libraries.

(3)、返回值

strlen返回(自定义或内存中随机)字符串的实际长度,不包括NULL。

从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。

二、Dem程序:

//主题:strlen()与sizeof相关的调研

// 参考:http://www.cnblogs.com/carekee/articles/1630789.html
#include <iostream>
#include <cstring>
using namespace std;

void test1();
void test2(char *p);

int main(void)
{
	test1();
	cout<<endl;

	char sz[10];
	cout<<"strlen(sz)="<<strlen(sz)<<endl;
	cout<<"sizeof(sz)="<<sizeof(sz)<<endl;
	cout<<endl;
	test2(sz);
}

void test1()
{
	cout<<"In test1():"<<endl;
	//char gz[10] = "12";
	char gz[10];
	cout<<"strlen(gz)="<<strlen(gz)<<endl;
	cout<<"sizeof(gz)="<<sizeof(gz)<<endl;
	cout<<endl;

	char *pch = new char[10];
	cout<<"strlen(pch)="<<strlen(pch)<<endl;	// 输出未定。因为这取决于pch存了什么值(从[0]直到遇到第一个NULL为止
	cout<<"sizeof(pch)="<<sizeof(pch)<<endl;
	//cout<<"strlen(*pch)="<<strlen(*pch)<<endl;	// [ERROR]IntelliSense: "char" 类型的实参与 "const char *" 类型的形参不兼容	// [ERROR]error C2664: “strlen”: 不能将参数 1 从“char”转换为“const char *”
	cout<<"sizeof(*pch)="<<sizeof(*pch)<<endl;
}

void test2(char *p)
{
	cout<<"In test2():"<<endl;
	cout<<"strlen(p)="<<strlen(p)<<endl;
	cout<<"sizeof(p)="<<sizeof(p)<<endl;
}

三、参考资料:

1、http://www.cnblogs.com/carekee/articles/1630789.html

时间: 2024-08-09 06:32:44

C++(C)中Sizeof与Strlen的区别的相关文章

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

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

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返回的值表示的含义

详说sizeof与strlen的区别与联系

sizeof是C/C++中的关键字,它是一个运算符,其作用是取得一个对象(数据类型或者数据对象)的长度(即占用内存的大小,以byte为单位). 当参数分别如下时,sizeof返回的值表示的含义如下: 数组--编译时分配的数组空间大小: 指针--存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4): 类型--该类型所占的空间大小: 对象--对象的实际占用空间大小: 函数--函数的返回类型所占的空间大小.函数的返回类型不能是void. strlen是函数,要在运行时才能计算.参数必

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

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

Sizeof与Strlen的区别【转】

本文转载自:http://www.cnblogs.com/carekee/articles/1630789.html Sizeof与Strlen的区别与联系 一.sizeof    sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等.    它的功能是:获得保证能容纳实现所建立的最大对象的字节大小.    由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小.实际上,用sizeof

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