当前位置: 首页 > news >正文

C53-字符串引入和注意事项.

一 基础语法

1. 底层关系

  • 字符串本质是char[](字符数组)以\0(空字符)结尾的特殊形式。
char str[] = "hello";  // 实际存储:['h','e','l','l','o','\0']
  • ✅ 可像数组一样通过下标访问字符
printf("%c", str[1]); // 输出 'e'

2.三种字符串的定义方式

  1. char CharArry1[]={'h','e','l','l','o'};//不常用 
    
  2. char CharArry2[]="hello";
    
  3. char *pCharArry3="hello";	//是常量指针
    
  4. 对比:第一种不太实用;第二三种比较:第二种可读可修改,第三种可读不可修改,是常量指针

    1. 数组:元素可修改(如arr[0] = 'H'合法)。
    2. 指针:指向的内容不可修改(如p[0] = 'H'非法)

第三中定义方式的测试:

  • 代码示例:
#include <stdio.h>
int main()
{char CharArry2[]="hello";char *pCharArry3="hello";for(int i=0;i<5;i++){printf("%c",*(pCharArry3+i));}return 0;
}
  • 成果展示:

image-20250528223101043

二 字符串的内存存放方式及结束标志

  • 存放方式:char[](字符数组)以\0(空字符)结尾。这也导致了它的长度增加了1
char str[] = "hello";  // 实际存储:['h','e','l','l','o','\0']
  • 代码示例:
#include <stdio.h>
int main()
{   int Arry[5]={1,2,3,4,5};char CharArry[]="hello";char CharArry1[]={'h','e','l','l','o'};int len1;int len2;int len3;len1=sizeof(Arry)/sizeof(Arry[0]);len2=sizeof(CharArry)/sizeof(CharArry[0]);len3=sizeof(CharArry1)/sizeof(CharArry1[0]);printf("len1:%d\nlen2:%d\nlen3:%d",len1,len2,len3);return 0;
}
  • 成果展示:

image-20250528225230758

三 sizeof与strlen的区别(非常重要)

相同点

  1. 均用于获取大小/长度信息
    两者都返回一个与内存或字符串相关的数值(sizeof 返回字节数,strlen 返回字符数)。

不同点

特性sizeofstrlen
作用对象任何数据类型(变量、类型、数组等)仅适用于字符串(以 \0 结尾的字符数组)
计算时机编译时确定(静态求值)运行时动态计算(遍历字符串直到 \0
返回值类型size_t(无符号整数)size_t(无符号整数)
是否包含 \0包含 \0 的占用空间不包含 \0(仅统计 \0 前的字符数)
对指针的处理返回指针本身的大小(通常4/8字节)需指向有效字符串,否则行为未定义
示例sizeof(int)sizeof(arr)strlen("hello")

总结

  • sizeof:编译器运算符,计算对象或类型的内存占用(包括 \0)。
  • strlen:库函数,运行时计算字符串的实际字符数(不包括 \0)。

我们直接测试

  • 代码示例:
#include <stdio.h>
#include <string.h>int main()
{   char CharArry[100]="hello";//测试:sizeof返回字节数printf(" sizeof(CharArry):%d\n",sizeof(CharArry));//测试:strlen返回字符数printf(" strlen(CharArry):%d\n\n",strlen(CharArry));char CharArry1[]="hello";//测试:sizeof包含\0的占用空间printf("sizeof(CharArry1):%d\n",sizeof(CharArry1));//测试:strlen不包含\0(仅统计\0前的字符数)printf("strlen(CharArry1):%d\n\n",strlen(CharArry1));char *PString="hello";char *PString1;//测试:sizeof返回指针本身的大小(通常4/8字节)printf("  sizeof(PString):%d\n",sizeof(PString));//测试:需指向有效字符串,否则行为未定义printf("  strlen(PString):%d\n",strlen(PString));printf(" strlen(PString1):%d\n\n",strlen(PString1));return 0;
}
  • 成果展示:image-20250528234011175

相关文章:

  • 硬件实时时钟(RTC)
  • 【机器学习基础】机器学习入门核心算法:GBDT(Gradient Boosting Decision Tree)
  • 如何使用DeepSpeed来训练大模型
  • 【前端】Vue3+elementui+ts,TypeScript Promise<string>转string错误解析,习惯性请出DeepSeek来解答
  • 部署LVS-DR群集
  • OpenAI大模型不听人类指令事件的技术分析与安全影响
  • 如何收集Oracle DB SQL Monitor报告
  • 根据基因名称自动获取染色体上的位置
  • 西门子SCL语言编写两台电机正反转控制程序,并涵盖从选型、安装到调试全过程的详细步骤指南(上)
  • opengl - 在本地搭建API的文档说明网站
  • 全球轨道铺设设备市场发展现状与未来趋势分析
  • 第 85 场周赛:矩阵重叠、推多米诺、新 21 点、相似字符串组
  • js中后台框架的增删改查要点
  • XCTF-web-easyphp
  • 从C++编程入手设计模式1——单例模式
  • vscode 配置 QtCreat Cmake项目
  • 性能测试怎么做?方法、流程与核心要点解析
  • 《Discuz! X3.5开发从入门到生态共建》第1章 Discuz! 的前世今生-优雅草卓伊凡
  • React+Antd全局加载遮罩工具
  • Linux轻量级文件传输——tftp命令
  • 网页版梦幻西游探案任务攻略/站优化
  • 网站代码如何做优化/nba排名最新赛程
  • 中材建设有限公司招标网站/线在科技成都网站推广公司
  • 化妆品手机端网站模板/热点新闻事件素材
  • 网站架构 seo/seo关键词排名工具
  • 杭州门户网站开发/阿里云免费建站