C语言-10.字符串

news2025/6/6 17:07:34

10.1字符串

10.1-1字符串

字符数组
char word[] = {‘H’,‘e’,‘l’,‘l’,‘o’,‘!’};

word[0] H
word[1] e
word[2] l
word[3] l
word[4] o
word[5] !

这不是C语言的字符串,因为不能用字符串的方式做计算
字符串
char word[] = {‘H’,‘e’,‘l’,‘l’,‘o’,‘!’};

word[0] H
word[1] e
word[2] l
word[3] l
word[4] o
word[5] !
word[6] \0

字符串

  • 以0(整数0)结尾的一串字符
  • 0或‘\0’是一样的,但是和‘0’不同
  • 0标志字符串的结束,但它不是字符串的一部分
  • 计算字符串长度的时候不包含这个0
  • 字符串以数组的形式存在,以数组或指针的形式访问
  • 更多的是以指针的形式
  • sring.h里有很多处理字符串的函数
    字符串变量
    以下是存储字符串的方式
  • char *str = “Hello”;
  • char word[] = “Hello”;
  • char line[10] = “Hello”;
    字符串常量
  • “Hello”
  • “Hello”会被编译器变成一个字符数组放在某处,这个数组的长度是6,结尾还有表示结束的0
  • 两个相邻的字符串常量会被自动连接起来
  • 行末的\表示下一行还是这个字符串常量
    字符串
  • C语言的字符串是以字符数组的形态存在的
  • 不能用运算符对字符串做运算
  • 通过数组的方式可以遍历字符串
  • 唯一特殊的地方是字符串字面量可以用来初始化字符数组
  • 以及标准库提供了一系列字符串函数
# include <stdio.h>

int main()
{
   
    
    char a[]="Hello";
    printf("%s",a);
}

10.1-2字符串常量

字符串常量
char* s = “Hello,world”;

  • s 是一个指针,初始化为指向一个字符串常量
  • 由于这个常量所在的地方,所以实际上s是const char* s,但是由于历史的原因,编译器接受不带const的写法
  • 但是试图对s所指的字符串做写入会导致严重的后果
  • 如果需要修改字符串,应该用数组:
  • char s[] = “Hello,world!”;
    指针还是数组?
  • char *str = “Hello”;
  • cahr world[] = “Hello”;
  • 数组:表示这个字符串在这里
  • 作为本地变量空间自动被回收
  • 指针:这个字符串不知道在哪里
  • 处理参数
  • 动态内存分配
    注意:如果要构造一个字符串–>数组
    如果要处理一个字符串–>指针
    char*是字符串?
  • 字符串可以表达为char*的形式
  • char*不一定是字符串
  • 本意是指向字符的指针,可能指向的是字符数组(就像int*一样)
  • 只有它所指的字符数组有结尾的0,才能说它所指的是字符串

10.1-3字符串输入输出

字符串赋值?

  • char *t = “title”;
  • char *s;
  • s=t;
  • 并没有产生新的字符串,只是让指针s指向了t所指的字符串,对s的任何操作就是对t做的
    字符串输入输出
  • char string[8];
  • scanf(“%s”,string);
  • printf(“%s”,string);
  • scanf读入一个单词(到空格,tab或回车为止)
  • scanf是不安全的,因为不知道要读入的内容的长度
    安全的输入
    char string[8];
    scanf(“%7s”,string);
    在%和s之间的数字表示最多允许读入的字符串的数量,这个数字应该比数组的大小小一
    常见错误
  • cahr *string;
  • scanf(“%s”,string);
  • 以为char*是字符串类型,定义了一个字符串类型的变量string就可以直接使用了
  • 由于没有对string初始化为0,所以不一定每次运行都没错
    空字符串
  • char buffer[100]=“”;
  • 这是一个空的字符串,buffer[0] == ‘\0’
  • char buffer = “”;
  • 这个数组的长度只有1!

10.2字符串函数

10.2-1单字符输入输出,用putcher和getcher

putcahr

  • int putchar(int c);
  • 向标准输出写一个字符
  • 返回写了几个字符,EOF(-1)表示写失败
    getchar
  • int getchar(viod);
  • 从标准输入读取一个字符
  • 返回类型是int是为了返回EOF(-1)
  • Windows–>Ctrl-Z
  • Unis–>Ctrl-D

10.2-2字符串函数strlen

标准库中的字符串函数
string.h

  • strlen
  • strcmp
  • strcpy
  • strcat
  • strchr
  • strstr
    strlen
  • size_t strlen(const cahr *s)
  • 返回s的字符串长度(不包括结尾的0)
#include <stdio.h>
#include <string.h>

int main()
{
   

    char a[]="Hello";
    printf("%s\n",a);
    printf("%lu",strlen(a));
}

以下是是通过自己写的函数逻辑实现strlen的功能

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

int strlen1(

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

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

相关文章

backend 服务尝试连接 qdrant 容器,但失败了,返回 502 Bad Gateway 问题排查

遇到的问题是&#xff1a; backend 报错&#xff1a;502 Bad Gateway 来自 Qdrant → 导致接口 /api/chat 返回 500 Internal Server Error并且日志中提示&#xff1a; QDRANT_URL http://qdrant:6333✅ 问题分析 这个错误的根本原因是&#xff1a; 你的 backend 服务尝试连…

18. Qt系统相关:多线程

一、概述 在Qt中&#xff0c;使用QThread类对系统线程进行了封装。QThread代表一个在应用程序中可独立控制的线程&#xff0c;也可以和进程中的其他线程共享数据。 二、QThread常用API 三、QThread使用 自定义一个类&#xff0c;继承自QThread&#xff0c;并且只有一个线程处…

6个月Python学习计划 Day 14 - 异常处理基础( 补充学习)

第二周 Day 8 - Python 函数基础 Day 9 - 函数进阶用法 Day 10 - 模块与标准库入门 Day 11 - 列表推导式、内置函数进阶、模块封装实战 Day 12 - 字符串处理 & 文件路径操作 Day 13 - 文件操作基础 &#x1f3af; 今日目标 理解异常的概念和常见异常类型掌握 try-except …

使用jstack排查CPU飙升的问题记录

最近&#xff0c;看到短视频传播了一个使用jstack来协助排查CPU飙升的案例。我也是比较感兴趣&#xff0c;参考了视频博主的流程&#xff0c;自己做了下对应案例的实战演练&#xff0c;在此&#xff0c;想做一下&#xff0c;针对相关问题模拟与排查演练的实战过程记录。 案例中…

cursor如何开启自动运行模式

在Cursor中&#xff0c;开启自动运行模式即启用“Yolo Mode”&#xff0c;具体操作如下&#xff1a; 按下Ctrl Shift J&#xff08;Windows/Linux&#xff09;或Cmd Shift J&#xff08;Mac&#xff09;打开Cursor设置。导航到“Features”&#xff08;功能&#xff09;选…

SecureCRT 设置超时自动断开连接时长

我们在使用SecureCRT 连接服务器时&#xff0c;经常性出现2分钟未操作已连接的服务器&#xff0c;就会自动断开连接&#xff0c;此时需要重新连接&#xff0c;非常影响服务器操作&#xff0c;本文可以很好带领大家解决这种问题。

IEC 61347-1:2015 灯控制装置安全标准详解

IEC 61347-1:2015灯控制装置安全标准详解 IEC 61347-1:2015 是国际电工委员会&#xff08;IEC&#xff09;发布的灯控制装置第1部分&#xff1a;通用要求和安全要求的核心标准&#xff0c;为各类照明用电子控制设备设定了全球通用的安全基准。该标准适用于独立式或内置于灯具/…

Ansys Zemax | 手机镜头设计 - 第 4 部分:用 LS-DYNA 进行冲击性能分析

附件下载 联系工作人员获取附件 该系列文章将讨论智能手机镜头模组设计的挑战&#xff0c;从概念和设计到制造和结构变形分析。本文是四部分系列中的第四部分&#xff0c;它涵盖了相机镜头的显式动态模拟&#xff0c;以及对光学性能的影响。使用 Ansys Mechanical 和 LS - DY…

[蓝桥杯]卡片换位

卡片换位 题目描述 你玩过华容道的游戏吗&#xff1f; 这是个类似的&#xff0c;但更简单的游戏。 看下面 3 x 2 的格子 --------- | A | * | * | --------- | B | | * | --------- 在其中放 5 张牌&#xff0c;其中 A 代表关羽&#xff0c;B 代表张飞&#xff0c;* …

【论文笔记】High-Resolution Representations for Labeling Pixels and Regions

【题目】&#xff1a;High-Resolution Representations for Labeling Pixels and Regions 【引用格式】&#xff1a;Sun K, Zhao Y, Jiang B, et al. High-resolution representations for labeling pixels and regions[J]. arXiv preprint arXiv:1904.04514, 2019. 【网址】…

【题解-洛谷】P9422 [蓝桥杯 2023 国 B] 合并数列

题目&#xff1a;P9422 [蓝桥杯 2023 国 B] 合并数列 题目描述 小明发现有很多方案可以把一个很大的正整数拆成若干正整数的和。他采取了其中两种方案&#xff0c;分别将他们列为两个数组 { a 1 , a 2 , ⋯ a n } \{a_1, a_2, \cdots a_n\} {a1​,a2​,⋯an​} 和 { b 1 , …

109页PPT华为流程模块L1-L4级梳理及研发采购服务资产5级建模

华为的流程体系是其核心竞争力之一&#xff0c;也是其从一家小型民营企业成长为全球领先科技巨头的重要支撑。这套体系的核心思想是以客户为中心、以价值创造为导向、以流程驱动业务、持续优化改进。 下载资料请查看文章中图片右下角信息 以下是华为流程体系的关键组成部分和特…

第N1周:one-hot编码案例

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊 一、one-hot编码概念 自然语言处理&#xff08;NLP&#xff09;中的文本数字化&#xff1a;文字对于计算机来说就仅仅只是一个个符号&#xff0c;计算…

Windows安装docker desktop

Windows 版本&#xff1a; Windows 10/11&#xff08;64位&#xff09;专业版、企业版或教育版&#xff08;家庭版需手动配置&#xff09;。 版本号需 ≥ 1909&#xff08;建议更新到最新系统&#xff09; 打开程序 启动服务后点点点 重启生效&#xff08;没有的话 安装WSL…

Ros(俩不同包的节点 交流 topic message)

不同的俩节点 如chao_node 和ma_node .在俩不同的包下。 他们若想互相产生联系&#xff0c; 就需要靠这个关系了。 想象一下是开黑的场景 其实群名就是topic 而发送的消息就是Message。 其中主动刷屏的message的一方 就是 Publisher 而接受的那一方 就是subsciber

李沐《动手学深度学习》 | 数值稳定性

文章目录 数值稳定性梯度消失Sigmoid作为激活函数 梯度爆炸 让训练更加稳定合理的权重初始化Xavier初始化&#xff08;常用&#xff09;He初始化/Kaiming方法 Batch Normalization Q&A 数值稳定性 当神经网络的深度比较深时&#xff0c;非常容易数值不稳定。 不稳定梯度是…

OpenCV CUDA模块图像处理------图像连通域标记接口函数connectedComponents()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数在 GPU 上执行二值图像的连通域标记操作&#xff0c;即将图像中所有相连的前景像素区域赋予相同的标签&#xff08;label&#xff09;&…

Android Studio 打包时遇到了签名报错问题:Invalid keystore format

错误指出密钥库的格式无效&#xff0c;可能是由于密钥库本身的问题导致的&#xff0c;还有一种可能是由于jdk版本导致。我试过重新签名&#xff0c;也是不行&#xff0c;后来发现是JDK版本问题&#xff0c;我的Studio之前是jbr11&#xff0c;好像后来合并代码重新下载编译了项目…

内存管理【Linux操作系统】

文章目录 简单谈一下物理内存管理页框为什么要把物理内存划分成一个一个固定大小的页框使用&#xff1f;对页框进行描述对页框进行组织管理虚拟地址→物理地址&#xff08;真实的页表&#xff09;真实的页表那我们如何把虚拟地址→物理地址呢&#xff1f;页表懒加载时&#xff…

Go语言学习-->从零开始搭建环境

Go语言学习–>从零开始搭建环境 1 开发环境 Go官网下载地址&#xff1a;https://golang.org/dl/ Go官方镜像站&#xff08;推荐&#xff09;&#xff1a;https://golang.google.cn/dl/ windos 平台下载&#xff1a; 我这里下载1.22稳定版 双击下载好的.msi文件 修改安装…