库函数strncpy的使用及其模拟实现

news/2024/9/22 15:48:03/

一、什么是strncpy

strncpy是一个C语言标准库函数,用于将一个字符串的一部分复制到另一个字符串中。它的声明通常是这样的:

char *strncpy(char *dest, const char *src, size_t n);

其中:

  1. dest为目标字符串;
  2. src为源字符串;
  3. n为需要拷贝的字符个数; 

也就是说, 该函数能够将src指向的字符串的前n个字符复制到dest指向的字符串中。如果src字符串的长度小于n,则dest将被空字符填充以保证总共复制n个字符。如果src字符串大于或等于n,则dest不会被空字符结束。

二、strncpy的使用

2.1源字符串短于指定长度:

#include <stdio.h>
#include <string.h>int main() 
{char src[] = "Hello, World!";char dest[20]; // 为目标字符串分配足够的空间// 将 src 的前 5 个字符复制到 dest 中strncpy(dest, src, 5);dest[5] = '\0'; // 手动添加字符串终止符,保证 dest 是以 null 结尾的 C 字符串printf("Copied string: %s\n", dest);return 0;
}

在上面这个例子中,我们需要注意的是:strncpy不会自动添加终止符,所以我们必须手动添加终止符到合适的位置,以确保它是以C字符串的形式结束的。

2.2源字符串等于指定长度:

#include <stdio.h>
#include <string.h>int main() 
{char src[] = "Hello";char dest[6]; // 目标字符串长度为 6,刚好足够放下 src 字符串和终止符// 将 src 复制到 dest 中strncpy(dest, src, sizeof(dest));dest[sizeof(dest) - 1] = '\0'; // 手动添加字符串终止符printf("Copied string: %s\n", dest);return 0;
}

2.3源字符串长于指定长度:

#include <stdio.h>
#include <string.h>int main() 
{char src[] = "Hello, World!";char dest[6]; // 目标字符串长度为 6// 将 src 复制到 dest 中,但是只复制 5 个字符,不包括终止符strncpy(dest, src, sizeof(dest));dest[sizeof(dest) - 1] = '\0'; // 手动添加字符串终止符printf("Copied string: %s\n", dest);return 0;
}

三、strncpy的模拟实现

 

#include<stdio.h>//模拟实现strncpy
//strncpy的原型char *strncpy(char *dest, const char *src, size_t n);char* my_strcpy(char* dest,const char* src,size_t n)
{char* start = dest;for (int i = 0; i < 5; i++){start[i] = src[i];}return dest;
}int main()
{char src[] = "Hello";char dest[20];my_strcpy(dest, src, 6);dest[5] = '\0';printf("%s\n", dest);return 0;
}

更多C语言相关练习请跳转test_c: C语言练习,包括常见语法练习以及小项目练习。 (gitee.com) 


http://www.ppmy.cn/news/1450966.html

相关文章

抖音视频0粉营销推广墙纸,当日收益,第二天提现,日入300

项目简介&#xff1a; 这个项目非常易于执行&#xff0c;主要涉及在抖音平台上分享爱国主题的壁纸&#xff0c;并通过推广相关的小程序来实现盈利。 下 载 地 址 &#xff1a; laoa1.cn/1849.html 项目操作简便&#xff0c;一般只需花费1个小时即可完成&#xff0c;一旦掌…

uni-app中,实现页面之间传参

使用场景&#xff1a; 前提条件&#xff1a;当我们从一个列表页面&#xff0c;进入新增页面&#xff0c; 情况1&#xff1a;在新增页面&#xff0c;信息添加成功后&#xff0c;返回列表页面&#xff0c;此时&#xff0c;需要更新列表数据&#xff1b; 情况2&#xff1a;在新增页…

238 基于matlab的水平轰炸弹道的求解

基于matlab的水平轰炸弹道的求解&#xff0c;列出轰炸弹道方程组并利用龙格库塔法解算弹道方程。设计中包含了二维弹道与三维弹道的计算&#xff0c;并都绘制了弹道运动轨迹&#xff0c;最终还将整个题目集中在一个图形用户界面&#xff08;GUI&#xff09;上。程序已调通&…

rust将json字符串直接转为map对象或者hashmap对象

有些时候我们还真的不清楚返回的json数据里面到底有哪些数据&#xff0c;数据类型是什么等&#xff0c;这个时候就可以使用批处理的方式将json字符串转为一个对象&#xff0c;然后通过这个对象的get方法来获取json里面的数据。 pub async fn test_json(&self) {let json_st…

FineBI学习:K线图

效果图 底表结构&#xff1a;日期、股票代码、股票名称、开盘价、收盘价、最高价、最低价 步骤&#xff1a; 横轴&#xff1a;日期 纵轴&#xff1a;开盘价、最低价 选择【自定义图表】&#xff0c;或【瀑布图】 新建字段&#xff1a;价差&#xff08;收盘-开盘&#xf…

ESP32 烧录固件

第一步&#xff1a;下载固件 git clone --recursive https://github.com/espressif/esp-at.git 第二步&#xff1a;执行编译 在该目录执行 python build.py install 如图&#xff1a; 第三步&#xff1a;选择芯片 输入2 第四步&#xff1a;选择固件 输入1 第五步&#…

赶紧收藏!2024 年最常见 100道 Java 基础面试题(二十六)

上一篇地址&#xff1a;赶紧收藏&#xff01;2024 年最常见 100道 Java 基础面试题&#xff08;二十五&#xff09;-CSDN博客 五十一、ThreadLocal是什么&#xff1f;有哪些使用场景&#xff1f; ThreadLocal是Java提供的一个线程局部变量工具&#xff0c;它允许线程持有它自…

uni-app scroll-view隐藏滚动条的小细节 兼容主流浏览器

开端 想写个横向滚动的列表适配浏览器&#xff0c;主要就是隐藏一下滚动条在手机上美观一点。 但是使用uni-app官方文档建议的::-webkit-scrollbar在目标标签时发现没生效。 .scroll-view_H::-webkit-scrollbar{display: none; }解决 F12看了一下&#xff0c;原来编译到浏览…