当前位置: 首页 > 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
http://www.xdnf.cn/news/691237.html

相关文章:

  • JavaScript 中 this 指向全解析:从基础到 Vue 应用
  • 【加密算法】
  • Qt/C++开发监控GB28181系统/sip协议/同时支持udp和tcp模式/底层协议解析
  • 【Microsoft 365可用】PPT一键取消所有超链接
  • Python 进阶【二】:多进程编程
  • TCP三次握手/四次握手-TCP/IP四层模型-SSL/TLS-HTTP-HTTPS
  • Bootstrap法进行随机模拟
  • 第11章:工程组织与系列总结
  • 8086 处理器寄存器超详细解析:从原理到实战
  • 三分钟打通Stable Diffusion提示词(附实战手册)
  • TDengine 运维——用户和权限
  • Agent 的7 中设计模式
  • 4.Consul服务注册与发现
  • 【深度学习】10. 深度推理(含链式法则详解)RNN, LSTM, GRU,VQA
  • 33.第二阶段x64游戏实战-InLineHook
  • Jmeter——JDBC连接数据库相关
  • 【vscode】切换英文字母大小写快捷键如何配置
  • 《Google I/O 2025:AI浪潮下的科技革新风暴》
  • 宁夏农业科技:创新引领,赋能现代农业新篇章
  • c语言实现Linux命令行补全机制
  • 运用集合知识做斗地主案例
  • 智能指针的使用及原理
  • MCP 登场:掘金开启 AI 前端项目部署新时代
  • 第三章、数据链路层
  • C++智能指针用法及内存管理
  • 双因子COX 交互 共线性 -spss
  • 多态 向上转型
  • YOLO人体姿态估计Pytorch推理ONNX模型推理
  • Android-GestureDetector学习总结
  • 微信小程序(uniapp)对接腾讯云IM