(20200331)C语言计算字符串长度(strlen函数和sizeof关键词)

本文主要是介绍(20200331)C语言计算字符串长度(strlen函数和sizeof关键词),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考:

【1】https://blog.csdn.net/u012209626/article/details/47449885?utm_source=blogxgwz5

+====================================================================

一般会用strlen()函数或sizeof来获取一个字符串的长度(sizeof其实求的类型大小,如sizeof(int)=4),但这2种方法获取的字符串的长度其实是不一样

ex01:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>int main(void)
{char s1[20] = "hello world";char s2[20] = { 'h', 'e', 'l', 'l', '0', ' ', 'w', 'o', 'r', 'l', 'd', '\0' };char s3[] = "hello\0 world";char s4[] = { 'h', 'e', 'l', 'l', '0', '\0', ' ', 'w', 'o', 'r', 'l', 'd', '\0' };printf("%d %d %d %d\n", strlen(s1), strlen(s2), strlen(s3), strlen(s4));printf("%d %d %d %d\n", sizeof(s1), sizeof(s2), sizeof(s3), sizeof(s4));system("pause");return 0;
}

说明:

1】上面定义了4个字符串,基本数据都是“hello world",,

字符串s1和s2给定了字符串数组的大小为20,然后使用2种方式进行赋值;

字符串s3和s4是s1和s2对比的字符串, 区别就是s3和s4字符串中间插入了一个'\0'。

2】strlen函数求得的字符串长度是从字符串第一个元素到第一个'\0'之间元素的个数(如果字符串中间有'\0',则结果不是整个字符串的长度),同时不包括该'\0'

3】 sizeof求得的结果是存储该字符串的变量占用的空间大小,因而一定会包括'\0'.若'\0'后还有空余的空间,也会包含到结果里面

4】2种求值方式的实现原理:

1. strlen()的一种实现就是遍历字符串,遇到'\0'就终止,因而返回的结果是第一个'\0'前字符元素的个数

2. sizeof 常用来求变量占用内存空间的大小,因而它返回的是存储字符串的变量所占用的内存空间大小,用来求字符串的长度,只在特定情况下可行,即字符数组刚好被一个字符串占满。

5】与strlen函数不同的是,sizeof不是一个函数,而是判断数据类型或者表达式长度符的关键字,也可以说是C/C++中的一个操作符(operator),其作用就是返回一个对象或者类型所占的内存字节数。

6】

数组的sizeof值等于数组所占用的内存字节数,如:

 char a1[] = "abc";
 int a2[3];
 sizeof( a1 ); // 结果为4,字符末尾还存在一个NULL终止符
 sizeof( a2 ); // 结果为3*4=12(依赖于int)

7】如何求数组中元素的个数呢?(以下两种方式是等价的)

int c1=sizeof(a1)/sizeof(char);//总长度/单个元素的长度  char型

int c2=sizeof(a2)/sizeof(a2[0]);//总长度/第一个元素的长度 int型

这篇关于(20200331)C语言计算字符串长度(strlen函数和sizeof关键词)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/530051

相关文章

C语言自定义类型之联合和枚举解读

《C语言自定义类型之联合和枚举解读》联合体共享内存,大小由最大成员决定,遵循对齐规则;枚举类型列举可能值,提升可读性和类型安全性,两者在C语言中用于优化内存和程序效率... 目录一、联合体1.1 联合体类型的声明1.2 联合体的特点1.2.1 特点11.2.2 特点21.2.3 特点31.3 联合体的大小1

Django中的函数视图和类视图以及路由的定义方式

《Django中的函数视图和类视图以及路由的定义方式》Django视图分函数视图和类视图,前者用函数处理请求,后者继承View类定义方法,路由使用path()、re_path()或url(),通过in... 目录函数视图类视图路由总路由函数视图的路由类视图定义路由总结Django允许接收的请求方法http

Go语言使用select监听多个channel的示例详解

《Go语言使用select监听多个channel的示例详解》本文将聚焦Go并发中的一个强力工具,select,这篇文章将通过实际案例学习如何优雅地监听多个Channel,实现多任务处理、超时控制和非阻... 目录一、前言:为什么要使用select二、实战目标三、案例代码:监听两个任务结果和超时四、运行示例五

C语言中%zu的用法解读

《C语言中%zu的用法解读》size_t是无符号整数类型,用于表示对象大小或内存操作结果,%zu是C99标准中专为size_t设计的printf占位符,避免因类型不匹配导致错误,使用%u或%d可能引发... 目录size_t 类型与 %zu 占位符%zu 的用途替代占位符的风险兼容性说明其他相关占位符验证示

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用

C语言进阶(预处理命令详解)

《C语言进阶(预处理命令详解)》文章讲解了宏定义规范、头文件包含方式及条件编译应用,强调带参宏需加括号避免计算错误,头文件应声明函数原型以便主函数调用,条件编译通过宏定义控制代码编译,适用于测试与模块... 目录1.宏定义1.1不带参宏1.2带参宏2.头文件的包含2.1头文件中的内容2.2工程结构3.条件编

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

详解MySQL中JSON数据类型用法及与传统JSON字符串对比

《详解MySQL中JSON数据类型用法及与传统JSON字符串对比》MySQL从5.7版本开始引入了JSON数据类型,专门用于存储JSON格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型... 目录前言基本用法jsON数据类型 vs 传统JSON字符串1. 存储方式2. 查询方式对比3. 索引