C语言中的strlen()和sizeof()对比分析

 更新时间:2023年03月07日 09:23:20   作者:qq_44976409  
这篇文章主要介绍了C语言中的strlen()和sizeof()区别对比,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

C语言中的strlen()和sizeof()对比

在C语言中,没有字符串这种变量类型,一般用两种方法实现。
一是用双引号生成常量字符串再赋值给一个指针,指针指向的是该常量字符串的首字符地址;
二是利用字符数组,把字符存储在数组中。值得注意的是,利用字符数组创建字符串的时候记得把’\0’存进去(‘\0’本身是一个字符,占一个字节),因为很多对字符进行操作的库函数或多或少都跟’\0’有关系,或者说’\0’是字符串结束的官方标志。

字符串
char arr[]={'a','a','a','a','a','a'}
char *str = "aaaaaa"

定义:
**1. strlen函数:**计算的是字符串str的长度,从字符的首地址开始遍历,以 ‘\0’ 为结束标志,然后将计算的长度返回,计算的长度并不包含’\0’。

当我们遇到“\0"时我们就要停止读取,此时“\0"前字符的个数就是字符串的长度,注意:这里的“\0"只是结束标志,仅仅告诉我们strlen函数读取到这里就要停止了,“\0"不算做一个字符!!!

**2. sizeof函数:**相比strlen函数,sizeof就简单多了,sizeof其实就是一个运算符,主要用来计算所占空间字节的大小。

指针字节:
指针 16位 2个字节
指针 32位 4个字节
指针 64位 8个字节

32位系统:
char 1个字节
short 2个字节
int 2个字节
long 4个字节
char* 4个字节
int* 4个字节
int** 4个字节

64位系统:
char 1个字节
short 2个字节
int 4个字节(x 2)
long 8个字节(x 2)
char* 4个字节
int* 4个字节
int** 4个字节

  • 字符串常量放在静态存储区,为只读,不能再通过指针修改,例如chr *p=“xiaolong”
  • strlen遇到\0结束,长度不包括\0
  • sizeof计算占用多少字节时,\0也包含在内

1. strlen()

int main () {
	
	char *str="xiaolong";
	printf("%d\n",strlen(str));
	return 0;	
}

输出:8
#include <stdio.h>
#include <string.h>
int main () {
	
	char str[]="xiaolong";
	printf("%d\n",strlen(str));
	return 0;	
}
输出:8
#include <string.h>
int main () {
	
	char str[10]="xiaolong";
	printf("%d\n",strlen(str));
	return 0;	
}

虽然数组大小是10,但是编译器自动在xiaolong后面添加了\0 ,因此长度不是10而是8
输出:8

2. sizeof()

#include <stdio.h>
#include <string.h>
int main () {
	
	char str[10]="xiaolong";
	printf("%d\n",sizeof(str));
	return 0;	
}

指定大小为n的char数组无论如何都是占用n个字节,例如此处10字节
输出:10
#include <stdio.h>
#include <string.h>
int main () {
	
	char *str="xiaolong";
	printf("%d\n",sizeof(str));
	return 0;	
}

由于是指针,32位机器指针占4个字节
输出:4
#include <stdio.h>
#include <string.h>
int main () {
	
	char str[]="xiaolong";
	printf("%d\n",sizeof(str));
	return 0;	
}

结果不是8而是9,因为默认在后面添加了一个\0,  \0也算一个字节
输出:9

1.size_t 的定义
size_t是一种机器相关的无符号类型,它被设计的足够大以便能表示内存中任意对象的大小。
在C语言中头文件为stddef.h,在C++语言中头文件为cstddef。
size_t 是sizeof的返回类型,在64位中是unsigned long int,在32位中是unsigned int。
2.使用
size_t类型通常用于循环、数组索引、大小的存储和地址运算。数组的下标通常定义为size_t类型。size_t可以跨平台,并且具有高代码的可移植性、有效性或者可读性。

参考资料:https://blog.csdn.net/shenlong1356/article/details/106321092/

到此这篇关于C语言中的strlen()和sizeof()对比的文章就介绍到这了,更多相关C语言 strlen()和sizeof()内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言数据的存储专项分析

    C语言数据的存储专项分析

    使用编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着,当您创建一个变量时,就会在内存中保留一些空间。您可能需要存储各种数据类型的信息,操作系统会根据变量的数据类型,来分配内存和决定在保留内存中存储什么
    2022-07-07
  • Windows10配置VSCode C++环境(超详细,面向小白以及大佬们)

    Windows10配置VSCode C++环境(超详细,面向小白以及大佬们)

    这篇文章主要介绍了Windows10配置VSCode C++环境(超详细,面向小白以及大佬们),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 自己简单封装的一个CDialog类实例

    自己简单封装的一个CDialog类实例

    这篇文章主要介绍了自己简单封装的一个CDialog类,实例分析了自定义封装CDialog类的相关技巧,比较简单易懂,需要的朋友可以参考下
    2015-04-04
  • C语言实现图的遍历之深度优先搜索实例

    C语言实现图的遍历之深度优先搜索实例

    这篇文章主要介绍了C语言实现图的遍历之深度优先搜索实例,采用不同的方法实现了深度优先搜索算法,有不错的借鉴价值,需要的朋友可以参考下
    2014-09-09
  • C++实现LeetCode(158.用Read4来读取N个字符之二 - 多次调用)

    C++实现LeetCode(158.用Read4来读取N个字符之二 - 多次调用)

    这篇文章主要介绍了C++实现LeetCode(158.用Read4来读取N个字符之二 - 多次调用),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C语言调试手段:锁定错误的实现方法

    C语言调试手段:锁定错误的实现方法

    本篇文章是对在C语言调试中,锁定错误的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++11/14 线程调用类对象和线程传参的方法

    C++11/14 线程调用类对象和线程传参的方法

    这篇文章主要介绍了C++11/14 线程调用类对象和线程传参的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • 一篇文章让你轻松理解C++中vector和list区别

    一篇文章让你轻松理解C++中vector和list区别

    对于学c语言的同学来说,vector和list这两个东西经常会搞错,下面这篇文章主要给大家介绍了关于C++中vector和list区别的相关资料,需要的朋友可以参考下
    2022-01-01
  • 详解socket阻塞与非阻塞,同步与异步、I/O模型

    详解socket阻塞与非阻塞,同步与异步、I/O模型

    这篇文章主要介绍了详解socket阻塞与非阻塞,同步与异步、I/O模型,socket网络编程中的同步,异步,阻塞式,非阻塞式,有何联系与区别,本文将详细讲诉。
    2016-12-12
  • C++实现LeetCode(136.单独的数字)

    C++实现LeetCode(136.单独的数字)

    这篇文章主要介绍了C++实现LeetCode(136.单独的数字),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07

最新评论