C/C++实现strcpy和strcat两个功能

2023-05-16

  strcpy和strcat是string.h头文件中分别实现字符串数组拷贝与拼接功能的函数,详细使用相信大家都了解了,如果还不了解看看实例 C/C++笔试必须熟悉掌握的头文件系列(四)——string.h/cstring就知道怎么使用了。
  下面我们直接来看看具体实现:
 1 strcpy实现 

char* myStrcpy(char* pre, const char* next)
{
    if (pre == nullptr || next == nullptr) //空指针直接返回
    {
        return nullptr;
    }
    if (pre == next)                       // 两者相等也无需拷贝了
        return pre;

    while ((*pre++ = *next++) != '\0');    // 依次赋值给主字符数组

    return pre;
}

  上面程序实现了strcpy的程序,实现很简单依次赋值给朱字符数组即可,当遇到next指向字符串结束字符’\0’后,完成赋值并且停止赋值。这样新赋值的’\0’就成了字符数组表示的字符串结尾符,哪怕主字符串pre比next长也会戛然而止。字符串判断不管字符数组存了啥,它只认到’\0’前的数是它的主体核心部分。
 2 strcat实现  

char* myStrcat(char* pre, const char* next)
{
    if (pre == nullptr || next == nullptr) // 如果有一个为空指针,直接返回pre
        return pre;
    char* tmp_ptr = pre + strlen(pre); //strlen计算字符数,需要包含都文件string.h,当然也可以自己实现

    while ( (*tmp_ptr++ = *next++) != '\0'); // 依次接着赋值

    return pre;
}

  上面程序实现了strcat拼接的功能,主要依靠新申请的一个指针先指向主字符数组的尾部,然后依次将另个字符数组字符赋值给后面的空间(可能有些人有疑惑,为什么没有申请额外空间就直接使用后面的空间,实际上这个是简版的写法,所以要求传入指针pre指向的字符数组有足够大的空间,看下面完整程序你就明白了。
 3 主程序 

#include<iostream>
#include<string>
#include<string.h>

using namespace std;

char* myStrcat(char* pre, const char* next)
{
    if (pre == nullptr || next == nullptr)
        return pre;
    char* tmp_ptr = pre + strlen(pre);

    while ( (*tmp_ptr++ = *next++) != '\0');

    return pre;
}

char* myStrcpy(char* pre, const char* next)
{
    if (pre == nullptr || next == nullptr)
    {
        return nullptr;
    }
    if (pre == next)
        return pre;

    while ((*pre++ = *next++) != '\0');

    return pre;
}

int main()
{
    char str1[100] = "12345";
    char str2[20] = "hello world";
    myStrcat(str1, str2);
    myStrcpy(str1, str2);
    printf("%s\n", str1);

    return 0;
}

  个人学习记录,由于能力和时间有限,如果有错误望读者纠正,谢谢!

  转载请注明出处:http://blog.csdn.net/FX677588/article/details/76702319

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C/C++实现strcpy和strcat两个功能 的相关文章

  • C语言字符串函数strcat的详细解释

    在C语言中 xff0c strcat xff08 xff09 函数是一个字符串处理函数 xff0c 它用于将一个字符串连接到另一个字符串的末尾 函数原型 char strcat char dest const char src 该函数接受两
  • 连接2个字符串,strcat函数。

    题目描述 设计函数连接2个字符串 单个字符串的长度不超过100 不要使用系统提供的strcat函数 输入要求 输入2个字符串 xff0c 每个字符串以换行符结束 保证每个字符串中不会出现空格 输出要求 输出连接好的字符串 输入样例 Coun
  • strcpy的使用

    include lt iostream gt include lt string h gt using namespace std int main char data 61 34 dhewdwehkfew qwdhqwhdj qwhdwq
  • 自己写出strcat函数

    通过指针和字符数组的结合写出strcat xff08 字符串拼接 源码如下 效果图 include lt stdio h gt include lt string h gt int main void char a 20 char b 20
  • 连接字符串strcat()函数

    strcat 函数的原型 xff1a span class hljs preprocessor include lt string h gt span span class hljs keyword char span span class
  • C/C++混淆点-strcat和strcpy区别

    一 原因分析 假设 xff1a char str 61 NULL str 61 new char 11 你想为字符串str开辟一个存储十个字符的内存空间 xff0c 然后你现在有两个字符串 xff1a char c1 61 34 abc 3
  • 自己实现strcat函数

    问题描述 xff1a 自己实现一个MyStrcat函数 xff0c 要和C语言库函数的strcat函数完成同样的功能 问题分析 xff1a 首先我们要了解一下strcat函数它到底做了什么事情 1 函数原型 char strcat char
  • strcat 你真的懂吗?

    http blog chinaunix net uid 26914516 id 4215338 html 声明 xff1a 使用GCC编译 strcat xff08 连接两字符串 xff09 函数定义 xff1a char strcat c
  • 自己动手写strcat函数

    char catstr char a char b char x 61 a while a 61 39 0 39 a 43 43 while b 61 39 0 39 a 61 b a 43 43 b 43 43 a 61 39 0 39
  • error C4996: ‘strcpy‘: This function or variable may be unsafe. Consider using strcpy_s instead.

    Hello everyone 我是鲁班 一个热衷于科研和软开的胖子 出现这个错误时 是因为strcpy函数不安全造成的溢出 解决方法是 找到 项目属性 点击 C 里的 预处理器 对 预处理器 进行编辑 在里面加入一段代码 CRT SECUR
  • 每日一练(三十七)

    文章目录 3 1 求字符串的子串个数 3 2 判断程序输出 3 3 strlen 实现 3 4 strcmp 实现 3 5 strcat 实现 每日一练合集 3 1 求字符串的子串个数 3 2 判断程序输出 3 3 strlen 实现 in
  • __strcpy_sse2_unaligned 与 -fno-builtin

    我正在调试我的程序 然后发生了最后一行 我该如何修复它 我用的是 fno builtin看看strcpy 但它表明 strcpy sse2 unaligned正在接到电话 root 19 booksrc gcc fno builtin g
  • 如何使用strcat()函数?

    我对C语言很陌生 我试图使用 strcat 函数 include
  • 比较两个字符串,strcmp 的问题

    我试图检查从 stdin 读取的行是否以 login 开头 但 strcmp 似乎不起作用 char s1 20 s2 20 fgets s1 20 stdin strncpy s2 s1 6 strcmp s2 login if strc
  • strcpy是如何实现的?

    我有一个关于使用 strcpy 的问题 我知道 ANSI C 标准规定 源和目标不得重叠 否则行为是不可预测的 我向您展示了一段代码 如果它是在 Linux 下使用旧的 gnu C 编译器编译的 那么它可以按我的预期工作 include
  • C++ 中 strcpy 的替代方案

    在C中我用过strcpy做一个深拷贝一个字符串 但它仍然是 fine to use strcpy在 C 中还是有更好的替代方案我应该使用 我将其放在上面的注释中 但只是为了使代码可读 std string a Hello std strin
  • 写入的字符数多于 malloc 的字符数。为什么它不失败?

    为什么以下工作有效并且不会抛出某种分段错误 char path usr bin char random 012 path random 0 so its malloc 13 but I get 16 bytes due to memory
  • strcpy 传递初始化的空指针 c [重复]

    这个问题在这里已经有答案了 我正在尝试以下代码 int main char yo yo char whaddup NULL strcpy whaddup yo 我遇到了段错误 在这里完成 C 菜鸟 其他地方说我应该初始化whaddup作为一
  • C++ 如何在不同位置用新字符串填充静态字符串数组?

    说我得到了这个 char MapIds 5000 Northeast Asia Hanyang Pusan Pyongyang Shanghai Beijing Hong Kong 5000 values etc I tried strcp
  • “C 中的 strcat 函数假设目标字符串足够大,可以容纳源字符串及其自身的内容”中的混乱。

    所以我读到了strcat函数应谨慎使用 因为目标字符串应足够大以容纳其自身和源字符串的内容 我编写的以下程序也是如此 include

随机推荐

  • 可随身携带的工业无人机?! ZR-M66六旋翼多镜头倾斜摄影无人飞行系统

    更多无人机测绘资讯 xff0c 关注 三维前沿 ZR M66六旋翼多镜头倾斜摄影无人飞行系统 xff0c 集合了领先于行业内的多种设计方式 xff0c 具备模块化设计 高效作业 安全可靠 直观作业管理四大核心优势 xff0c 摆脱传统测绘作
  • PLC寻址应注意的问题

    L MD100 LAR1 与 L MD100 LAR1 有什么区别 xff1f 当将MD100以这种 MD100 形式表示时 xff0c 你既要在对MD100赋值时考虑到所赋的值是否符合存储器间接寻址双字指针的规范 xff0c 又要在使用这
  • STL简介以及STL中的容器

    我认为STL 标准模板库 就是对常见数据结构和算法的再封装 xff0c 以便开发者能更加灵活的使用数据结构和常用算法 通常认为 xff0c STL由容器 算法 迭代器 函数对象 适配器 内存分配器 这 6 部分构成 容器 简单理解容器 xf
  • 奇偶校验原理及C实现

    奇偶校验 xff0c 是通过计算数据流中比特位1的个数向原数据流后补充1bit的 0 或 1 xff0c 来检查数据流是否正确的方法 奇校验 xff08 odd parity xff09 xff1a 如果字符数据位中 1 的数目为偶数 xf
  • PHP curl发送 post GET 请求 携带请求头 并接收参数 上传\下载文件或图片

    发送post 请求 64 param sUrl 请求地址 64 param aData 请求参数 64 return bool string function http post sUrl aData ch 61 curl init cur
  • C++ 类对象的初始化顺序

    C 43 43 构造函数调用顺序 1 创建派生类的对象 xff0c 基类的构造函数优先被调用 xff08 也优先于派生类里的成员类 xff09 xff1b 2 如果类里面有成员类 xff0c 成员类的构造函数优先被调用 xff1b 也优先于
  • requests模块中使用代理proxy发送请求

    1 代理概述 玩爬虫为什么我们不能使用一个固定IP发送请求 你使用一个固定IP发送每秒向对方服务器发送10几个请求 对方认为这样操作不是人干的 就把你IP给封了服务器端的人可以根据你IP很快锁定你 要求你对这种窃取行为赔偿 代理 外链图片转
  • FIFO理解

    小白一枚 以下是我在学习SCI通信时 xff0c 使用到FIFO寄存器对其手册进行学习的一些经验与心得 xff0c 为了防止以后使用时忘记 xff0c 故此记录 仅供本人使用 另 xff1a 如有理解不当之处 xff0c 欢迎指正 xff0
  • 使用CMake导入第三方库

    欢迎关注微信公众号 自动驾驶事务所 获取更多知识 欢迎关注公众号 自动驾驶事务所 xff0c 分享更多以C C 43 43 为计算机语言 xff0c 以自动驾驶为方向的文章 使用CMakeLists txt 中间需要导入第三方的库当我们需要
  • 通过onvif协议接入海康、大华NVR步骤

    通过onvif协议接入海康 大华NVR步骤 https wenku baidu com view 6f1fcf37192e45361066f54b html
  • C语言的二维数组初始化的几种方式介绍(私藏大数组初始化方式)

    C语言的二维数组初始化的几种方式介绍 1 直接赋值2 循环对每个元素赋值3 借用memset memset s初始化为0或 14 96 数组所有元素初始化为相同值 xff08 用于大数组初始化贼方便 xff09 96 1 直接赋值 适合数组
  • 怎么用管理员方式打开压缩包

    今天下载了安卓的源代码 xff0c 解压时 xff0c 报了 34 Cannot create symbolic link xxx 34 34 You may need to run WinRAR as administrator 34 的
  • Android的build-tools的下载方式

    Android的build tools的多种版本的下载 1 方式一 xff1a Android Studio上的配置下载2 官网上直接下载 1 方式一 xff1a Android Studio上的配置下载 通过参数 buildToolsVe
  • Visual Studio上一些Error的解决方案

    近期在迁移一个linux上下项目到windows xff0c 编译时出来一堆error xff0c 挑了一些做记录 目录 1 E1696无法打开源文件 unistd h2 E0020 未定义标识符 34 getcwd 34 3 E0020
  • windows下怎么查看exe是32位还是64位

    xxx exe用记事本或notepad打开 xff0c 找有字符的第二行中 PE 字符串旁边 xff0c 如果是 d xff0c 则为64位 xff1b 如果是 L xff0c 则为32位
  • 无法定位程序输入点 _ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev于动态链接库

    在执行编译出来的exe时 xff0c 报了 无法定位程序输入点 ZNSt7 cxx1118basic stringstreamIcSt11char traitsIcESaIcEEC1Ev于动态链接库 的异常 出现这个问题时 xff0c 应该
  • 踩了个C++的未定义标识符"cout"的坑

    问题表现 没怎么用过C 43 43 写过完整的项目 xff0c 今天闲来无事 xff0c 便创建个c 43 43 的工程玩玩 xff0c 结果一个简单的打印输出就给卡住了 xff0c 无法打开文件 iostream h xff0c cout
  • Electron-Vue之安装流程

    近期摒弃了熟悉的WPF xff0c 选用了新的一套工具 xff08 Electron Vue xff09 来开发桌面软件 xff08 我是连html都没用过的猿 xff0c no zuo no die xff09 接触新的东西 xff0c
  • vscode的调试配置

    文章目录 vscode的调试配置文件调试配置选项 vscode的调试配置文件 vscode的调试配置存储在 vscode文件夹的launch json文件中 通过以下步骤可以创建一个调试配置 xff1a 切换到调试视图单击create a
  • C/C++实现strcpy和strcat两个功能

    strcpy和strcat是string h头文件中分别实现字符串数组拷贝与拼接功能的函数 xff0c 详细使用相信大家都了解了 xff0c 如果还不了解看看实例 C C 43 43 笔试必须熟悉掌握的头文件系列 xff08 四 xff09