`

sizeof strlen 的区别

 
阅读更多

sizeof 和strlen

直接给代码:

char *c="abcdef";
char d[]="abcdef";
char e[]={'a','b','c','d','e','f'};
printf("sizeof(c):%d\tstrlen(c):%d\n",sizeof(c),strlen(c));
printf("sizeof(d):%d\tstrlen(d):%d\n",sizeof(d),strlen(d));
printf("sizeof(e):%d\tstrlen(e):%d\n",sizeof(e),strlen(e));

输出结果是

4 6
7 6
6 14

sizeof()()操作符返回对象/类型所占空间大小(字节为单位)。这个返回值的大小并不一定是对象的内容所占的空间。基于效率方面考虑,存在编译对齐这一行为,对于结构体来说,成员分布不一定连续,sizeof()的结果往往大于本身各个数据成员sizeof()返回值之和。(数组是连续存放的,通常编译器通常不对数组实施对齐,所以这里不需要考虑这点。)

strlen是从参数给定的内存地址开始判断该地址上对应的char值是否为0,如果不是则继续判断下一个,最后返回非0字节的个数,所以不只适用于字符串。不过对于非字符串,由于字符串结束符0存在的不确定,所以不一定能得到结果。

sizeof:根据你的内容的大小,返回一个数值。也就是说它反映的是你的数组的空间大小,或者是指针的大小。

strlen:根据你数组中字符串的大小,返回一个数值。字符串,是以0结尾的ASCII码。其中0所在的位置不算在字符串内。其中要注意一点,strlen长度记到0结束,跟数组的大小没有关系。

 

以上问题就很好解决了:

 sizeof(c):4,strlen(c):6     这里的c为指针,那么就反映指针的大小。c为指针,sizeof结果和sizeof(int)相同(32位系统中为4)。c指向了长度为6的字符串字面量,所以strlen(c)返回6

sizeof(d):7,strlen(d):6    这里的d是数组,dchar[]数组,初始化中可以确定它的类型是char[7],每个元素(char型)占1个字节,所以共7字节(注意初始化列表中的两个双引号之间的字符串字面量填充到数组中时,会自动在最后补0strlen理由同上

sizeof(e):6, strlen(e):(不能确定)对于这个数组,因为其只包含6个字符其中不包括0,而strlen要查到0才算结束,所以超出6个字符就不一定到什么位置能结束了。

 测试结果:

#include<stdio.h>

void main()
{
	// 0 就是'\0'.('\0'的Asicii值等于0);
	//strlen计算字符长度,遇到0停止(不计算0);
	//sizeof计算总长度(包括0);

	//VC++中32位系统,给int分配32位,即四个字节,a数组第五个为0,
	//但是,它是int类型的,第一个'1'保存在内存的格式为 0x01 0x0 0x0 0x0;
	//即在strlen计算第一个数据时候,计算了0x01然后就遇到0了,所以strlen计算a的结果是1;
	int a[10]={'1','2','3','4',0,'\0'};
	
	//b数组,包含了5个元素,是char类型的,但是第六个后面我们不知道是什么,
	//所以strlen计算b的长度,不确定,sizeof就只计算5,因为数组长度就是5;
	//如果是{'1','2','3','4','5','\0'}加了个'\0',那么结果就不一样了:
	//此时sizeof就是6,strlen就是5了,因为strlen遇到'\0'就停止了
	char b[]={'1','2','3','4','5'};    
	
	//字符串赋值,此时内存默认在字符串后面添加一个'\0',然后计算结果同上
	char c[]="1234567";
	int d=0;

	printf("sizeof(a)=%d,strlen(a)=%d\n",sizeof(a),strlen(a));
	printf("sizeof(b)=%d,strlen(b)=%d\n",sizeof(b),strlen(b));
	printf("sizeof(c)=%d,strlen(c)=%d\n",sizeof(c),strlen(c));

	printf("%s\n%s\n%s\n",a,b,c);
	/*
	scanf("%d,%c",&c,&d);
	printf("\n%3d,%c\n",c,d);
	if(c==1&&d=='a')
		printf("ok\n");
	else 
		printf("no\n");
	*/
}

 输出结果查看 图片附件

  • 大小: 8.2 KB
分享到:
评论

相关推荐

    sizeof与strlen区别

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

    sizeof和strlen区别

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

    sizeof与strlen区别详解

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

    sizeof和strlen的区别

    `sizeof`和`strlen`是C语言中两个非常重要的概念,它们在处理内存和字符串长度时发挥着不同的作用。理解这两个操作符的区别对于编写高效、可靠的C程序至关重要。 `sizeof`是一个运算符,用于获取类型或者变量在内存...

    sizeof 和strlen 区别.pdf

    `sizeof`是一个运算符,而`strlen`是一个函数,它们有着明显的区别。 1. `sizeof`运算符: - `sizeof`在编译时计算,因此它能获取到任何类型、变量、数组、结构体或函数的大小,单位通常是字节。对于基本数据类型...

    Sizeof与Strlen的区别与联系

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

    Sizeof与Strlen的区别与联系.pdf

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

    sizeof 和strlen的区别

    ### `sizeof`与`strlen`的区别 1. **计算时机**:`sizeof`在编译时确定类型或变量的大小;而`strlen`在运行时根据字符串内容计算长度。 2. **参数类型**:`sizeof`可以应用于任意类型的数据或类型名,而`strlen`仅...

    sizeof与strlen的区别共4页.pdf.zip

    总之,`sizeof`和`strlen`是程序员在处理数据和字符串时经常用到的工具,理解它们的工作原理和区别对于编写高质量的C/C++程序具有重要意义。在实际编程中,根据需要选择合适的操作来获取正确的信息,可以提高代码的...

    有关strlen和sizeof的归纳与总结

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

    Sizeof与Strlen的区别与联系.docx

    《Sizeof与Strlen的区别与联系》 在计算机编程中,`sizeof`和`strlen`是两个经常使用的操作符和函数,它们在处理字符串和数据类型时有着不同的作用和特性。本文将深入探讨它们之间的区别和联系。 首先,`sizeof`是...

    strcpy,sprintf,memcpy的区别,Sizeof与Strlen的区别.docx

    《strcpy、sprintf、memcpy的区别与Sizeof与Strlen的区别》 在编程中,字符串处理和内存操作是非常重要的部分,理解并熟练运用相关函数是每个程序员的基本技能。本文将详细解析strcpy、sprintf、memcpy这三个函数的...

    浅谈sizeof与strlen函数的区别.pdf

    《浅谈sizeof与strlen函数的区别》 在C语言中,`sizeof`和`strlen`都是用来获取内存占用信息的重要工具,但它们的应用场景和计算方式却有着显著的区别。本文将详细解析这两个操作符的特性。 首先,`sizeof`是C语言...

    24_sizeof与strlen的区别1

    在C++编程语言中,`sizeof`和`strlen`是两个非常重要的运算符和函数,它们各自用于不同的目的。理解两者的区别对于编写高效且无误的代码至关重要。 `sizeof`是一个运算符,它返回一个类型或者表达式所占据的内存...

    浅谈sizeof与strlen函数的区别.docx

    《深入理解sizeof与strlen函数的区别》 在编程领域,了解并掌握sizeof和strlen这两个关键函数的用法至关重要,它们在处理内存和字符串长度时起到关键作用。本文将深入探讨这两个函数的概念、工作原理以及它们之间的...

    strlen和sizeof的区别.md

    strlen和sizeof的区别

Global site tag (gtag.js) - Google Analytics