java strcpy,详解C语言中strcpy()函数与strncpy()函数的使用

C语言strcpy()函数:复制字符串

头文件:#include

定义函数:

char *strcpy(char *dest, const char *src);

函数说明:strcpy()会将参数src 字符串拷贝至参数dest 所指的地址。

返回值:返回参数dest 的字符串起始地址。

附加说明:如果参数 dest 所指的内存空间不够大,可能会造成缓冲溢出(buffer Overflow)的错误情况,在编写程序时请特别留意,或者用strncpy()来取代。

范例

#include

main(){

char a[30] = "string(1)";

char b[] = "string(2)";

printf("before strcpy() :%s\n", a);

printf("after strcpy() :%s\n", strcpy(a, b));

}

执行结果:

before strcpy() :string(1)

after strcpy() :string(2)

C语言strncpy()函数:复制字符串的前n个字符

头文件:#include

strncpy()用来复制字符串的前n个字符,其原型为:

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

【参数说明】dest 为目标字符串指针,src 为源字符串指针。

strncpy()会将字符串src前n个字符拷贝到字符串dest。

不像strcpy(),strncpy()不会向dest追加结束标记'\0',这就引发了很多不合常理的问题,将在下面的示例中说明。

注意:src 和 dest 所指的内存区域不能重叠,且 dest 必须有足够的空间放置n个字符。

【返回值】返回字符串dest。

【函数示例】拷贝4组字符串。

#include

#include

int main(void){

char dest1[20];

char src1[] = "abc";

int n1 = 3;

char dest2[20]="********************";

char src2[] = "abcxyz";

int n2 = strlen(src2)+1;

char dest3[100] = "http://see.xidian.edu.cn/cpp/shell/";

char src3[6] = "abcxyz"; // 没有'\0'

int n3 = 20;

char dest4[100] = "http://see.xidian.edu.cn/cpp/u/yuanma/";

char src4[] = "abc\0defghigk";

int n4 = strlen(src3);

strncpy(dest1, src1, n1); // n1小于strlen(str1)+1,不会追加'\0'

strncpy(dest2, src2, n2); // n2等于strlen(str2)+1,恰好可以把src2末尾的'\0'拷贝到dest2

strncpy(dest3, src3, n3); // n3大于strlen(str3)+1,循环拷贝str3

strncpy(dest4, src4, n4); // src4中间出现'\0'

printf("dest1=%s\n", dest1);

printf("dest2=%s, dest2[15]=%c\n", dest2, dest2[10]);

printf("dest3=%s\n", dest3);

printf("dest4=%s, dest4[6]=%d, dest4[20]=%d, dest4[90]=%d\n", dest4, dest4[6], dest4[20], dest4[90]);

return 0;

}

VC6.0运行结果:

c7473fa49e0d12cdecb27c4cbf59f353.png

MinGW运行结果:

d70120c2791bb34eef4c9216d9335a3b.png

从上面的运行结果可以看出,strncpy()很难掌控,行为诡异。使用strncpy()最安全方式是使n等于strlen(src)+1,即拷贝整个字符串,同时将'\0'追加到dest。但这又与strcmp()的作用没有什么两样。

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

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

相关文章

使用github+hexo搭建静态blog

解决了个人博客图片不显示问题。解决了打开页面产生404问题。学习了如何更换界面主题。学习了如何使用Git。 注:这篇文章仅仅是入个门,了解一下怎么使用githubhexo创个静态blog,具体blog细节比如个人介绍,评论插件,音…

java 安卓调试,Android Studio(二十一):调试你的应用

Android Studio包含了一个调试器,允许你调试运行在Android虚拟机或连接的Android设备的应用。通过Android Studio的调试器,你可以:1、 选择你调试设备的app2、 为你的代码设置断点3、 在运行时检测变量和表达式4、 截图和录像通过点击工具栏中…

mysql hammerdb,[料理佳餚] 用 HammerDB 來執行資料庫 TPC-C 效能量測

TPC-C 模擬的情境TPC-C 模擬的情境是一個大型的商品批發商,擁有若干個倉庫,每個倉庫擁有 100000 件商品庫存、負責為 10 個地區供貨,每個地區服務 3000 名客戶,每名客戶平均一筆訂單有 10 項商品,所有訂單中約 1% 在其…

axure 鼠标变成手,Axure教程|鼠标移入移出自动显示与隐藏三级菜单

前几天因工作需要做一个鼠标移入显示隐藏菜单,鼠标移出自动隐藏菜单,做的时候觉得没有什么问题,做完后预览就发现一个很严重的问题,就是鼠标移出一级菜单向二级菜单时二级菜单不显示,或者二级菜单显示三级菜单不显示。…

php websocket应用实例,php使用websocket示例详解

下面我画了一个图演示 client 和 server 之间建立 websocket 连接时握手部分,这个部分在 node 中可以十分轻松的完成,因为 node 提供的 net 模块已经对 socket 套接字做了封装处理,开发者使用的时候只需要考虑数据的交互而不用处理连接的建立…

java basic data type,java基本数据类型--Basic Datatypes

Variables are nothing but reserved memory locations to store values. This means that when you create a variable you reserve some space in the memory.---说的好有道理Based on the data type of a variable, the operating system allocates memory and decides what…

adminer.php下载,Adminer.php

Adminer.php就是原来的phpMinAdmin,这是用PHP编写的数据库管理工具,支持mysql、mariadb、postgresql、sqlite、MS SQL、Oracle等多种数据库,虽然是一个源码,但是可以使用用户们和密码直接连接到数据库的服务器,既可以对…

windows下如何在命令行里切换到任意目录

切换到C盘中的某个文件夹,比如AppData,可以执行命令cd AppData; 但如果想切换到D盘,输入cd d:是不行的; 如果我们要切换盘符的目录,正确的用法是在cd 和路径中间 增加一个“/d”,如cd /d d: 也可以不用cd指令&#x…

Java基础 系统注解 @Override @Deprecated @SuppressWarnings 使用的方法及原因

Java 系统注解 为什么用?: 好处:使用系统定义的注解,可以在编译时对程序进行检查。 注解用在包、类、字段、方法、局部变量、方法参数等的前面,对这些元素进行说明和注释。 Override Override用来修饰一个方法&am…

单片机实验:交通灯控制

实验要求 按照电路要求在Protues中设计电路图,或者使用开发板。编程实现如下功能: 用单片机端口作输出口,控制四个方向共12个发光二极管亮灭,模拟交通灯管理。功能描述如下:初始态为四个路口的红灯全亮之后&#xff0…

单片机实验:节日彩灯控制器

任务 设计8路节日彩灯控制器,要求在Protues中设计接口电路图,并编程实现节日彩灯闪烁方式的控制: 通过P1.0到P1.2来控制3个按键。3个按键分别对应3种彩灯闪烁方式。彩灯闪烁方式分别为:从上往下的循环、从下往上以及从中间向两边…

单片机实验:数据区传送程序

任务 将单片机片内存储器存储区首地址设置为60H、片外存储器存储区首地址设置为4000H,存入片内存储区内容为04H-14H共17个字节 ,读取片内首地址为60H单元内容,将该内容传送到片外数据存储器存储区中保存(首地址4000H),将保存在片…

shapefile导入oracle,shp2sdo.exe用法:shpfile导入OracleSpatial

在使用OracleSpatial时,不免需要将shpfile导入,本人使用shp2sdo.exe和oracle内置工具(sqlplus和sqlldr)来完成,使用熟了还比较方便,主要是手动操作四步,本人是在windows中进行的,导入cities.shp。1. 转换数据格式首先使用shp2sdo.…

信号与系统实验:信号抽样

已知一个连续时间信号f(t)sinc⁡(t)f(t)sinc⁡(t)f(t)sinc⁡(t),取最高有限带宽频率fm1Hzf_m1Hzfm​1Hz (1)分别显示原连续信号波形和 fsfm、fs2fm、fs3fmf_sf_m、f_s2f_m、f_s3f_mfs​fm​、fs​2fm​、fs​3fm​三种情况下抽样信号的波形。…

php 的html文件怎么打开,什么是html文件?html格式如何打开?(图)

打开html的软件有:1、记事本;2、Adobe Dreamweaver软件;3、sublime text软件;4、notepad软件;5、vscode软件等等。有时我们会遇到html格式的文件需要打开,那么什么是html格式?该怎么打开html格式…

信号与系统实验:用Matlab表示常用连续时间信号

(1)单位阶跃信号u(t)u(t)u(t) function yheaviside(t) y(t>0);单位阶跃信号的MATLAB源程序如下: t-10:0.001:10; yheaviside(t); plot(t,y,r);(2)单位冲激信号δ(t)δ(t)δ(t) 单位冲激信号的MATLAB源程序如下: x-100:0.1:100; ydirac(x); %狄拉克…

信号与系统实验:Matlab求连续时间信号的傅里叶变换

1.用Matlab符号运算求解法求单边指数信号f(t)e−2tu(t)f(t)e^{-2t}u(t)f(t)e−2tu(t)的FT MATLAB源程序为: ftsym(exp(-2*t)*heaviside(t)); fwfourier(ft)运行结果为: fw 1/(2 w*1i)2.用Matlab符号运算求解法求F(jw)11w2F(jw)\frac{1}{1w^2}F(jw)1…

数据结构实验:一元多项式计算器

一、实验内容及要求 1.任务描述: 实验内容: 设有一元多项式Am(x)和Bn(X),编程实现多项式Am(x)和Bn(x)的加法、减法和乘法运算。其中多项式描述为: Am(x)A0A1x1A2x2A3x3….Amxm; Bn(x)B0B1x1B2x2B3x3….Bnxn。 输入和…

数据结构实验:城市交通咨询模拟系统

一、 实验目的 1.目的:掌握图的存储、构建、搜索等操作和应用,能用最短路径及其搜索等算法编制较综合性的程序,求解最优路线问题,进行程序设计、数据结构和算法设计等方面的综合训练。 2.任务:…

传感器信号处理仿真实验(c语言实现),均值滤波,滑动滤波

文章目录总结test1、动态显示一段正弦波信号的曲线:test2、现提供随机信号函数,随意设定两路不同幅度的随机信号,动态显示出来。test3、用均值法将原始的传感器信号进行滤波处理test4、用滑动滤波法将原始的传感器信号进行滤波处理总结 1.为…