嵌入式Linux系统编程 — 4.3 strcat、strcpy函数拼接与复制字符串

目录

1 字符串拼接

1.1 strcat函数

1.2 strncat函数

1.3 示例程序

2  字符串复制

2.1 strcpy函数

2.2 strncpy函数

2.3 示例程序


1 字符串拼接

1.1 strcat函数

在Linux系统中,strcat 函数是C语言标准库中的一个函数,用于将一个字符串追加到另一个字符串的末尾。函数原型如下:

char *strcat(char *dest, const char *src);
  • dest:指向目标字符串的指针,这个字符串有足够的空间来容纳追加后的字符串。
  • src:指向要追加的源字符串的指针。

1.2 strncat函数

strncat 函数用于将一个字符串的一部分追加到另一个字符串的末尾,与 strcat 函数类似,但 strncat 允许你指定最多追加的字符数。函数原型如下:

char *strncat(char *dest, const char *src, size_t n);
  • dest:指向目标字符串的指针,这个字符串有足够的空间来容纳追加后的字符串。
  • src:指向要追加的源字符串的指针。
  • n:要追加的最大字符数。

1.3 示例程序

下面的示例程序从键盘获取两个字符串,然后将它们拼接在一起,并打印出结果:

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

#define MAX_STR_LEN 100 // 定义字符串的最大长度

int main() 
{
    char str1[MAX_STR_LEN], str2[MAX_STR_LEN], result[MAX_STR_LEN * 2]; // 定义三个字符串数组

    // 获取用户输入的第一个字符串
    printf("请输入第一个字符串:");
    fgets(str1, MAX_STR_LEN, stdin); // 使用fgets来读取一行输入,包括空格

    // 获取用户输入的第二个字符串
    printf("请输入第二个字符串:");
    fgets(str2, MAX_STR_LEN, stdin);

    // 去除可能读取的换行符
    str1[strcspn(str1, "\n")] = 0;
    str2[strcspn(str2, "\n")] = 0;

    // 使用strcat函数将两个字符串拼接
    strcpy(result, str1); // 首先复制第一个字符串到结果字符串
    strcat(result, str2); // 然后将第二个字符串追加到结果字符串的末尾

    // 打印拼接后的字符串
    printf("拼接后的字符串是: %s\n", result);

    return 0;
}

程序首先定义了两个字符串缓冲区,用于存储用户输入的两个字符串,并通过 fgets 函数读取用户输入,同时去除换行符。然后,程序使用 strcpy 函数将第一个字符串复制到两个结果缓冲区,接着使用 strcat 将第二个字符串完整追加到第一个结果缓冲区,而使用 strncat 仅将第二个字符串的前两个字符追加到第二个结果缓冲区。最后程序打印出两种不同的拼接结果。运行结果如下:

2  字符串复制

strcpy()strncpy() 都是C语言标准库中的字符串操作函数,它们用于复制字符串,但是它们在行为上有一些的区别:

2.1 strcpy函数

strcpy() 函数将一个字符串复制到另一个字符串中。strcpy() 不会自动在目标字符串的末尾添加空字符 '\0',如果目标字符串的空间不足,会导致缓冲区溢出。函数原型如下:

char *strcpy(char *dest, const char *src);
  • dest:目标字符串的指针,需要有足够的空间来存储源字符串,包括结尾的空字符 '\0'
  • src:源字符串的指针。

2.2 strncpy函数

strncpy()函数将一个字符串的一部分复制到另一个字符串中,可以指定复制的最大字符数。strncpy() 会复制源字符串 src 的前 n 个字符到目标字符串 dest。如果 src 中的字符少于 n 个,剩余的字符将被填充为 \0,直到 dest 中总共有 n 个字符。如果 src 中的字符多于 n 个,则只有前 n 个字符被复制,dest 中剩余的空间不会被填充为 \0,因此可能不会形成一个以 \0 结尾的字符串。函数原型如下:

char *strncpy(char *dest, const char *src, size_t n);
  • dest:目标字符串的指针。
  • src:源字符串的指针。
  • n:要复制的最大字符数。

2.3 示例程序

下面是一个C语言示例程序,演示如何使用 strcpy()strncpy() 函数来复制用户通过键盘输入的字符串,并打印出两种函数复制的结果:

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

#define MAX_STR_LEN 100 // 定义字符串的最大长度

int main() 
{
    char src[MAX_STR_LEN]; // 源字符串
    char dest1[MAX_STR_LEN]; // 使用strcpy复制的目标字符串
    char dest2[MAX_STR_LEN + 1]; // 使用strncpy复制的目标字符串,+1是为了确保有足够的空间存储额外的空字符

    // 获取用户输入的字符串
    printf("请输入一个字符串:");
    fgets(src, MAX_STR_LEN, stdin); // 使用fgets来读取一行输入,包括空格

    // 去除可能读取的换行符
    src[strcspn(src, "\n")] = 0;

    // 使用strcpy函数复制整个字符串
    strcpy(dest1, src);
    printf("使用strcpy复制的字符串: %s\n", dest1);

    // 清空dest2以便重新使用
    memset(dest2, 0, sizeof(dest2)); // 使用memset清空dest2

    // 使用strncpy复制前20个字符
    strncpy(dest2, src, 5);
    // 确保dest2以空字符结尾,strncpy可能不会复制空字符
    dest2[20] = '\0';
    printf("使用strncpy复制的字符串: %.20s\n", dest2); // 打印前20个字符

    return 0;
}

程序首先输入一个字符串,然后使用 fgets 读取用户输入,去除末尾的换行符。接着,使用 strcpy 函数将用户输入的字符串完整复制到 dest1,并打印出来。之后,程序使用 memset 清空 dest2,然后用 strncpy 函数复制用户输入的前5个字符到 dest2,并打印出复制的字符串的前20个字符。程序运行结果如下:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL内存使用率高且不释放问题排查与总结

背景 生产环境mysql 5.7内存占用超过90%以上&#xff0c;且一直下不来。截图如下&#xff1a; 原因分析 1、确定mysql具体的占用内存大小&#xff0c;通过命令&#xff1a;cat /proc/Mysql进程ID/status查看 命令执行后的结果比较多&#xff08;其他参数的含义想了解可参考这…

【Python】已解决:(SqlServer报错)SQL错误(208):对象名‘string_split’无效

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;&#xff08;SqlServer报错&#xff09;SQL错误&#xff08;208&#xff09;&#xff1a;对象名‘string_split’无效 一、分析问题背景 在使用Python连接SqlSe…

泰迪智能科技携手广州番禺职业技术学院共建上进双创工作室

为充分发挥校企双方的优势&#xff0c;促进产教融合&#xff0c;发挥职业教育为社会、行业、企业服务的作用&#xff0c;为企业培养更多高素质、高技能的应用型人才的同时也为学生实习、就业提供更大空间。6月26日&#xff0c;“泰迪广州番禺职业技术学院上进双创工作室签约授牌…

体验过可道云teamOS这些人性化设置,就再也回不去了

公司出于对文件安全的看重&#xff0c;让数据不落地&#xff0c;更安全&#xff0c;使用企业网盘办公已经是我们的办公常态了。 作为一款每天都要使用的软件&#xff0c;良好的使用体验是非常重要的。 今天就来谈一谈在使用可道云teamOS过程中&#xff0c;它那些令用户好感上升…

高中数学:复数-基础概念及运算法则

一、定义 规定 复数集与实数集之间的关系 二、复数的几何意义 第一种几何意义 第二种几何意义 复数向量的模 共轭复数 三、四则运算 加法 复向量加法 减法 两复数的距离 乘法 除法 四、总结 复数的所有运算法则和实数相同。 向量运算和实数向量运算相同。 怎么简便记忆了&a…

3D Wizard(巫师法师人物角色模型)

3D Wizard低多边形模型,可用于RPG射击游戏和其他项目。角色顶点数:44154 无HDRP 仅默认着色器 顶点数:44154 装配有人形骷髅。 下载:​​Unity资源商店链接资源下载链接 效果图:

企业“出海”动向 | 香港电讯助力企业勇闯东南亚市场

众所周知&#xff0c;随着中国人口红利及经营成本的上升&#xff0c;越来越多跨国企业的制造工厂往东南亚、印度等国家迁移。而国内的一些中低端制造业也由于地缘优势&#xff0c;纷纷在东南亚地区建立“代工厂”。 近几年&#xff0c;接过 “世界代工厂”重任的东南亚逐步向数…

C#使用MJpeg实现视频流发送与显示

1、发送视频流&#xff1a; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Drawing; using System.Globalization; using System.IO; using System.Linq; using System.Net.Sockets; using System.Text; using System.T…

企业级数据库18条黄金设计原则(全网最详细!!!)

前言 1.名字 2.字段类型 3.字段长度 4.字段个数 5. 主键 6.存储引擎 7. NOT NULL 8.外键(不建议使用外健) 9. 索引 10.时间字段 11.金额字段 12. json字段 13.唯一索引 14.字符集 15. 排序规则 16.大字段 17.冗余字段 18.注释 前言 后端开发的日常工作&#…

超高速PCIe EtherCAT运动控制卡在高速异形插件机上的应用

市场应用背景 异形插件机主要应用于电子制造业中&#xff0c;专门用于自动化电子装配过程。它能够按照预设程序将编带或者供料器的电子元件通过多工位多头夹取&#xff0c;将电阻、电容、晶体管、连接器和按键等异形元件自动插装到PCB板的指定通孔上&#xff0c;极大地提高生产…

【PL理论深化】(9) Ocaml 语言:自定义类型 | 异常处理 | 模块

&#x1f4ac; 写在前面&#xff1a;本章我们将继续介绍 OCaml 的基本特性&#xff0c;自定义类型、异常处理和模块。掌握了这些内容后&#xff0c;编写基本程序应该不会有太大困难。接下来的两节将学习函数式编程中常用的两种编程风格 —— 递归函数和高阶函数。 目录 0x00 …

基于盲信号处理的声音分离——最小化增益的ICA算法

基于最小化增益的ICA算法的算法是依据混合信号经过盲信号分离会产生一定的噪声&#xff0c;为了使得分离后的信号与原信号的比值最小时&#xff0c;叫做增益最小。当增益越小时&#xff0c;分离后噪声越小&#xff0c;分离信号越接近原信号&#xff0c;分离算法的效果越好。这是…

防止多次点击,vue的按钮上做简易的防抖节流处理

话不多说,上个视频,看看是不是你要的效果 防抖节流 1.创建一个directive.js // directive.js export default {install(Vue) {// 防重复点击(指令实现)Vue.directive(repeatClick, {inserted(el, binding) {el.addEventListener(click, () > {if (!el.disabled) {el.disabl…

【Stable Diffusion】AI绘画美女,搞副业,赚钱真香!(内附高质量美女提示词)

前言 今天就直接上干货&#xff0c;给铁子们上一些生成高质量美女的提示词&#xff0c;每一种美女类型都附有魔法咒语&#xff0c;可应用于midjourney和stablediffusion&#xff0c;直接复制即可。 话不多说&#xff0c;直接上图&#xff0c;上提示词&#xff0c;请欣赏&…

三大工作流引擎技术Activiti、Flowable、Camunda选型指南

文章目录 前言1 流程引擎发展历程2 流程引擎主要概念BPM (Business Process Management)BPMN (Business Process Model and Notation)CMMN (Case Management Model and Notation)DMN (Decision Model and Notation)事件&#xff08;Event&#xff09;顺序流&#xff08;Sequenc…

控制台扫雷(C语言实现)

目录 博文目的实现思路项目创建文件解释 具体实现判断玩家进行游戏还是退出扫雷棋盘的确定地图初始化埋雷玩家扫雷的实现雷判断函数 源码game.cgame.h扫雷.c 博文目的 相信不少人都学习了c语言的函数&#xff0c;循环&#xff0c;分支那我们就可以写一个控制台的扫雷小游戏来检…

【AI落地应用实战】如何让扫描工具更会思考——智能高清滤镜2.0实战测评

一、引言 在这个信息爆炸的数字化时代&#xff0c;扫描工具已经成为我们日常工作和学习中不可或缺的助手。最近&#xff0c;扫描全能王推出了革命性的“智能高清滤镜2.0”&#xff0c;本次更新后&#xff0c;智能高清滤镜能够智能识别并优化扫描过程中的各种问题。无论是光线不…

【乐吾乐2D可视化组态编辑器】图元外观编辑

1 节点的外观样式 角度&#xff1a;设置尖角与圆角&#xff0c;值的范围&#xff1a;0~1 旋转&#xff1a;设置图形的旋转角度 进度&#xff1a;任意封闭图形&#xff0c;都可以当进度条&#xff1a;矩形、圆、svg、封闭连线、或其他任意封闭图形&#xff0c;值的范围&#…

强化学习:值函数近似【Deep Q-Network,DQN,Deep Q-learning】

强化学习笔记 主要基于b站西湖大学赵世钰老师的【强化学习的数学原理】课程&#xff0c;个人觉得赵老师的课件深入浅出&#xff0c;很适合入门. 第一章 强化学习基本概念 第二章 贝尔曼方程 第三章 贝尔曼最优方程 第四章 值迭代和策略迭代 第五章 强化学习实例分析:GridWorld…

【升压电子烟方案】DC-DC电源升压恒压芯片FP6277+全极低功耗霍尔MH251在电子烟中的应用

电子烟是一种新型烟草制品&#xff0c;由于其健康、环保和口感多样化的特点&#xff0c;逐渐受到了消费者的青睐。 升压芯片作为电子烟的核心组件之一&#xff0c;主要作用是将输入的电压升高至合适的工作电压&#xff0c;霍尔传感器控制电子烟的使用状态&#xff0c;以确保电子…