嵌入式Linux系统编程 — 4.2 sizeof 和 strlen 的作用和区别

news2024/11/26 5:35:30

目录

1 strlen函数

2 sizeof函数

3 sizeof 和 strlen 的作用和区别(面试必问)

3.1 作用

3.2 主要区别


1 strlen函数

strlen() 函数是 C 语言标准库中的一个函数,用于计算字符串的长度。它不包括字符串末尾的空字符('\0'),这是字符串结束的标准表示方法。函数原型:

#include <string.h>

size_t strlen(const char *s);
  • s 是指向要计算长度的字符串的指针。
  • 函数返回一个 size_t 类型的值,表示字符串的长度。

下面的示例程序提示用户输入一个字符串,然后计算并输出该字符串的长度:

#include <stdio.h>
#include <string.h>

int main() 
{
    char inputString[101]; // 定义一个足够大的数组以存储输入的字符串和空字符

    // 提示用户输入一个字符串
    printf("Please enter a string: ");
    fgets(inputString, sizeof(inputString), stdin); // 使用 fgets 读取一行文本

    // 计算字符串长度,去除末尾的换行符
    size_t length = strlen(inputString);
    if (inputString[length - 1] == '\n') {
        inputString[length - 1] = '\0'; // 将换行符替换为空字符
        --length; // 减去换行符的字符数
    }

    // 输出字符串长度
    printf("The length of the string is: %zu\n", length);

    return 0;
}

程序首先定义了一个字符数组 inputString,大小为 101,确保有足够的空间存储用户的输入和字符串结束的空字符。然后使用 fgets() 函数读取用户输入的一行文本,包括空格。fgets() 会将输入的文本和末尾的换行符一起存储在 inputString 中。 

接下来,程序使用 strlen() 函数计算字符串的长度。如果字符串的最后一个字符是换行符('\n'),程序会将其替换为字符串结束的空字符('\0'),并从长度中减去这个字符。最后,程序输出字符串的长度。这里使用 %zu 作为 size_t 类型的格式化输出占位符。

运行结果如下:

2 sizeof函数

sizeof 运算符是 C 语言中的一个关键字,用于确定变量或数据类型在内存中的大小(以字节为单位)。它是一个编译时运算符,这意味着它在编译代码时计算大小,而不是在程序运行时。

基本用法:

  • 对于数据类型:sizeof 可以确定任何数据类型的大小。例如,sizeof(int) 将给出 int 类型在当前平台上的大小。
  • 对于变量:sizeof 可以确定任何变量的大小。例如,sizeof(variableName) 将给出 variableName 变量的大小。

示例程序:

#include <stdio.h>

int main() {
    int integerValue = 10;
    double doubleValue = 3.14;
    char charValue = 'a';
    
    // 打印不同类型变量的大小
    printf("Size of integer: %zu bytes\n", sizeof(integerValue));
    printf("Size of double: %zu bytes\n", sizeof(doubleValue));
    printf("Size of char: %zu bytes\n", sizeof(charValue));
    
    // 打印类型本身的大小
    printf("Size of int: %zu bytes\n", sizeof(int));
    printf("Size of double: %zu bytes\n", sizeof(double));
    printf("Size of char: %zu bytes\n", sizeof(char));

    return 0;
}

sizeof 运算符被用来打印不同类型变量和类型本身的大小。注意,sizeof 的返回类型是 size_t,这是一个无符号整数类型,通常用于表示大小。运行结果如下:

3 sizeof 和 strlen 的作用和区别(面试必问)

3.1 作用

sizeof 运算符

  • sizeof 是 C 语言的关键字,用于确定变量或数据类型在内存中的大小,以字节为单位。
  • 它是一个编译时运算符,意味着它在编译代码时就确定了大小。
  • sizeof 可以用于任何数据类型或变量,例如 sizeof(int) 或 sizeof(variableName)
  • sizeof 的结果是一个 size_t 类型的值,表示内存大小。

strlen 函数

  • strlen 是标准 C 库中的一个函数,用于计算以空字符('\0')结尾的字符串的长度。
  • 它是一个运行时函数,需要在程序执行时调用。
  • strlen 只能用于以空字符结尾的字符串,例如 strlen("Hello, World!")
  • strlen 会遍历字符串中的每个字符,直到遇到空字符(是'\0',不是空格),然后返回从字符串开始到空字符之前的字符数量。

3.2 主要区别

  • 作用域sizeof 可以用于任何类型和变量,而 strlen 仅用于以空字符结尾的字符串。
  • 作用sizeof 给出的是变量或类型在内存中占用的总字节数,而 strlen 给出的是字符串中字符的数量(不包括结尾的空字符)。
  • 时间sizeof 是编译时确定的,strlen 是运行时计算的。
  • 返回类型sizeof 的结果类型是 size_t,而 strlen 的返回类型是 size_t 或 unsigned int(取决于实现)。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1872037.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

原、反、补码之间的相互转换以及计算机硬件实现有符号数、无符号数、定点小数、定点整数的加减法运算

目录 原、反、补码之间的相互转换 无符号整数的加减运算 无符号整数的加法运算 无符号整数的减法运算 有符号整数的加减运算 有符号整数补码的加法运算 有符号整数补码的减法运算 定点小数的加减运算 定点小数补码的加法运算 定点小数补码的减法运算 定点小数VS定点整…

CSS|05 继承性与优先级

继承性 一、继承性的特点&#xff1a; 1.外层元素身上的样式会被内层元素所继承 2.如果内层元素与外层元素身上的演示相同时&#xff0c;外层元素的样式会被内层元素所覆盖 二、关于继承性的问题 是不是所有样式都能被继承&#xff1f; 答&#xff1a;并不是所有样式能被继承…

1991java Web体检预约管理系统eclipse定制开发mysql数据库BS模式java编程jdbc

一、源码特点 JSP体检预约管理系统是一套完善的web设计系统&#xff0c;对理解JSP java 编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发&#xff0c;数据库为Mysql5.0&#xff0c;使用…

Unity3D Text使用超链接跳转事件

系列文章目录 Unity工具 文章目录 系列文章目录&#x1f449;前言&#x1f449;一、第一种使用TextMeshPro加入超链接&#x1f449;二、继承Text组件,重载OnPopulateMesh方法&#x1f449;三.壁纸分享&#x1f449;总结 &#x1f449;前言 有时候会用到跳转的问题,所以添加一…

详细分析Oracle修改默认的时间格式(四种方式)

目录 前言1. 会话级别2. 系统级别3. 环境配置4. 函数格式化5. 总结 前言 默认的日期和时间格式由参数NLS_DATE_FORMAT控制 如果需要修改默认的时间格式&#xff0c;可以通过修改会话级别或系统级别的参数来实现 1. 会话级别 在当前会话中设置日期格式&#xff0c;这只会影响…

【UE开发】游戏库存UI系统Demo

1.项目介绍 1.描述&#xff1a;一种用于存储记录玩家物品的游戏内可视化操作系统。 2.演示&#xff1a;https://www.bilibili.com/video/BV1f53neVEfW/?vd_source50dea901fd12253f417c48b937975b0d 3.大纲&#xff1a; 4.样式&#xff1a; 2.W_Inventory_Main_01&#xff08;…

云效BizDevOps上手亲测

云效BizDevOps上手亲测 什么是云效项目协作Projex配置2023业务空间原始诉求字段原始诉求工作流创建原始诉求配置2023产品空间创建主题业务原始诉求关联主题配置2023研发空间新建需求需求关联主题 与传统区别云效开发流程传统开发流程云效BizDevOps 操作体验 什么是云效 在说到…

java+mysql图书管理系统

完整代码地址 1.运行效果图 2.主要代码 2.1.连接数据库 package com.my.homework.utils;import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException;public class JDBCUtils {public static Connection getConnection() throws Exception {…

安装containerd

containerd文档地址 containerd介绍 早在2016年3月&#xff0c;Docker 1.11的Docker Engine里就包合了containerd&#xff0c;而现在则是把containerd从Docker Engine里彻底剥离出来&#xff0c; 为一个独立的开源项目独立发展&#xff0c;目标是提供一个更加开放、稳定的容器…

使用FRP 0.58版本进行内网穿透的详细教程

什么是FRP&#xff1f; FRP&#xff08;Fast Reverse Proxy&#xff09;是一款高性能的反向代理应用&#xff0c;主要用于内网穿透。通过FRP&#xff0c;您可以将内网服务暴露给外网用户&#xff0c;无需进行复杂的网络配置。 准备工作 服务器&#xff1a;一台具备公网IP的服…

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第49课-机器人自动跳舞

【WEB前端2024】3D智体编程&#xff1a;乔布斯3D纪念馆-第49课-机器人自动跳舞 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎…

谷歌发布两款新Gemma 2大语言模型;阿里云开源Qwen2-72B模型荣登榜首

&#x1f989; AI新闻 &#x1f680; 谷歌发布两款新Gemma 2大语言模型 摘要&#xff1a;谷歌发布Gemma 2大语言模型&#xff0c;包括90亿和270亿参数两种版本。Gemma 2在推理性能、效率和安全性上较第一代有显著提升。27B模型的性能媲美更大规模的主流模型&#xff0c;且部署…

提升自来水公司经济效益的策略研究

现阶段&#xff0c;如何提高自来水公司经济效益的问题已经得到社会的广泛关注。文章将立足于成本管理的角度&#xff0c;在对自来水公司生产现状分析的基础上&#xff0c;总结影响自来水公司经济效益的相关因素&#xff0c;最后从成本管理的角度出发&#xff0c;对如何提高自来…

Hadoop-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece

背景介绍 这里是三台公网云服务器&#xff0c;每台 2C4G&#xff0c;搭建一个Hadoop的学习环境&#xff0c;供我学习。 之前已经在 VM 虚拟机上搭建过一次&#xff0c;但是没留下笔记&#xff0c;这次趁着前几天薅羊毛的3台机器&#xff0c;赶紧尝试在公网上搭建体验一下。 注…

huggingface加速下载模型

文章目录 所需环境huggingface-cli 用法登录token 获取 huggingface 镜像huggingface 缓存hf-transfer 拉满下载带宽如果开了的话&#xff0c;记得关掉科学上网&#xff01;&#xff01;&#xff01; 所需环境 python huggingface-cli 用法 huggingface-cli的更多用法点击这…

挂售转卖竞拍商城系统/竞拍系统/转拍闪拍系统+前端

挂售转卖竞拍商城系统源码/竞拍系统/转拍闪拍系统/后端PHP前端UNIAPP源码 玩法简介 ①、后台可添加商品进行挂单 ②、后台设置场次以及场次开始时间 ③、用户抢单 ④、抢单以后可选择提货或者转售 ⑤、玩家寄售需按照后台设置百分比进行加价 ⑥、玩家寄售需支付手续费(余额支付…

代码随想录——加油站(Leetcode 134)

题目链接 贪心 class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {int curSum 0;int totalSum 0;int start 0;for(int i 0; i < gas.length; i){// 当前剩油量curSum gas[i] - cost[i];// 总剩油量totalSum gas[i] - cost[i];// 当前剩油量小…

【Linux】高级IO——五种IO模型和基本概念 ,非阻塞IO,fcntl,实现非阻塞IO,同步通信和异步通信

文章目录 Linux高级IO1. 五种IO模型1.1 阻塞IO1.2 非阻塞IO1.3 信号驱动IO1.4 IO多路转接1.5 异步IO 2. 同步通信和异步通信3. 阻塞和非阻塞 Linux高级IO 1. 五种IO模型 IO是什么&#xff1f; IO是计算机领域中的缩写&#xff0c;指的是输入/输出&#xff08;Input/Output&…

(番外篇)指针的一些相关习题讲解(速进,干货满满)(1)

前言&#xff1a; 我已经好久没写过博客了&#xff0c;这几天确实有点偷懒了&#xff0c;上次博客我们已经讲完了指针的部分内容&#xff0c;但我觉着没有习题是不够的&#xff0c;于是我出了这一篇番外篇&#xff0c;来让各位读者朋友们进行指针强化&#xff0c;这些题目都是小…

k8s学习--k8s群集部署zookeeper应用及详细解释

文章目录 zookeeper什么是zookeeper基本概念主要功能工作原理使用场景优点缺点 k8s集群部署zookeeper环境一、zookeeper部署YAML资源清单准备二、zookeeper部署及部署验证三、zookeeper应用验证 zookeeper 什么是zookeeper ZooKeeper 是一个开源的分布式协调服务&#xff0c;…