当前位置: 首页 > news >正文

c库函数:strcpy()和strncpy()的案例

 1.基本信息


strncpy
定义于头文件 
    <cstring> 
函数形式
    char* strcpy( char* dest, const char* src );
功能
    复制 src 所指向的字符串,包含空终止符,到首元素为 dest 所指向的字符数组。
    若 dest 数组不够大则行为未定义。若字符串重叠则行为未定义。
参数
    dest - 指向要写入的字符数组的指针 
    src - 指向复制来源的空终止字节字符串的指针 
返回值
    dest

strncpy
定义于头文件 
    <cstring>
函数形式
    char *strncpy( char *dest, const char *src, std::size_t count );
功能
    复制 src 所指向的字节字符串的至多 count 个字符(包含终止空字符)到 dest 所指向的字符数组。
    若在复制整个字符串 src 前抵达 count ,则产生的字符数组不是空终止的。
    若在复制来自 src 的终止空字符后未抵达 count ,则写入额外的空字符到 dest ,直至写入总共 count 个字符。
    若字符串重叠,则行为未定义。
参数
    dest - 指向要复制到的字符数组的指针 
    src - 指向作为复制来源的字节字符串的指针 
    count - 要复制的最大字符数 
返回值
    dest

 2.代码案例

文件名:strncpy_lib.cpp

#include <iostream>
#include <cstring>
using namespace std;int main(void)
{cout << "hello strncpy() and strcpy()" << endl;const char* str_tmp1 = "We is having a lunch!";const char* str_tmp2 = "....";char char_tmp[50] = {0};char * pchar = (char*)char_tmp;if(50 > strlen(str_tmp1)){cout << " 50 >  " << strlen(str_tmp1) << endl;cout << "strcpy: " << strcpy(char_tmp, str_tmp1) << endl;cout << "char_tmp: " << char_tmp << endl;cout << "strncpy:" << strncpy(char_tmp, str_tmp2, 6) << endl;cout << "char_tmp: " << char_tmp << endl;for(int i = 0; i < 50; i++){if(*pchar){cout << *pchar;}else{cout << "0";}pchar++;}cout << endl;}
}

3. Makefile

TGT := app
OPTION := -I.
SRC = strncpy_lib.cppall:$(TGT)@echo "Make successfull!"$(TGT):$(SRC)g++ -std=c++11 $(OPTION) $^ -o $@clean:ifneq ( ,$(wildcard *.o))@rm *.oendififneq ( ,$(wildcard ${TGT}))@rm $(TGT)else@echo "no fie exist, nothing to do"endif.PHONY: all clean

4.运行结果

xuehy@ubuntu:/mnt/hgfs/code/lib_study/lib_cpp_and_c$ make
g++ -std=c++11 -I. strncpy_lib.cpp -o app
Make successfull!
xuehy@ubuntu:/mnt/hgfs/code/lib_study/lib_cpp_and_c$ ./app
hello strncpy() and strcpy()50 >  21
strcpy: We is having a lunch!
char_tmp: We is having a lunch!
strncpy:....
char_tmp: ....
....00having a lunch!00000000000000000000000000000

相关文章:

  • 现代密码学-国密算法
  • 揭秘最强气象武器的库,SPEI-Python不可思议之处.
  • 029、事务
  • web前端任职条件:全面解析
  • 大数据入门实践一:mac安装Hadoop,Hbase,FLume
  • 使用ZIP包安装MySQL及配置教程
  • 基于STM32和人工智能的智能气象站系统
  • Hvv--知攻善防应急响应靶机--Linux1
  • c#调用c++dll方法
  • 生产者消费者模型的同步与互斥:C++代码实现
  • Another app is currently holding the yum lock; waiting for it to exit...
  • 【机器学习】机器学习与教育科技在个性化教学中的融合应用与性能优化新探索
  • 什么是贸易顺差和贸易逆差?
  • Hadoop生态圈中的各个组件的介绍
  • Unity UGUI ScrollRect 滑动显示左右箭头
  • 【Amaple教程】5. 插件
  • 【知识碎片】第三方登录弹窗效果
  • angular2 简述
  • jquery ajax学习笔记
  • Terraform入门 - 3. 变更基础设施
  • Vue 重置组件到初始状态
  • 构建二叉树进行数值数组的去重及优化
  • puppet连载22:define用法
  • ​flutter 代码混淆
  • (2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
  • (C语言)fread与fwrite详解
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (四)事件系统
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)c++ std::pair 与 std::make
  • .net Signalr 使用笔记
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • @Autowired注解的实现原理
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149
  • [2010-8-30]
  • [20170728]oracle保留字.txt
  • [APUE]进程关系(下)
  • [BZOJ] 2006: [NOI2010]超级钢琴
  • [C#基础知识系列]专题十七:深入理解动态类型
  • [C和指针].(美)Kenneth.A.Reek(ED2000.COM)pdf
  • [leetcode]Clone Graph
  • [Linux系统编程] 静态库与动态库
  • [one_demo_4]不使用第3个变量交换两个变量的值
  • [Qualcomm][GPIO]高通芯片引脚相关知识记录
  • [respberry pi3][suse] 配置docker
  • [RK-Linux] 移植Linux-5.10到RK3399(四)| 检查HDMI配置与打开内核LOGO显示
  • [Spring Cloud Task]3 框架配置详解