-
2019-05-26 15:39:33
#include<string.h> char *strncpy(char *dest, const char *src, unsigned long n);
功能是将指针变量src所指向的字符串复制到指针变量dest所指向的位置。而strncpy()的功能是将指针变量src所指向的字符串的前 n 个字符串复制到指针变量dest所指向的位置。只要将strcpy()掌握之后,strncpy就简单多了,关于strncpy()唯一需要注意的是如果他不是复制整个字符串,那么最后的结束标识符’\0’就不会被复制,这时候必须手动编程在后添加’\0’,否则输出时由于找不到结束符就会输出乱码,他会一直输出,直到遇到’\0’为止。
内存拷贝函数memcpy()
strcpy()只能复制字符串,但是memcpy()可以复制任何数据,因为他是内存拷贝函数,是直接操作内存空间。
#include<stdio.h> void *memcpy(void *dest, const void *src, unsigned long n);
功能是从指针变量src所指向的内存空间中复制 n 个字节的数据到指针变量 dest 所指向的内存空间。
1 字符数组 dest 的长度一定要大于复制的字符字节数 n,否则会产生溢出,导致相邻内存空间的数据被覆盖,这样很危险。
2 入股复制的是完整的字符串,那么字符数组 dest 的长度和复制的字节数 n 一定要考虑最后的标识符’\0’;
3 如果不是完整复制一个字符串,而是仅仅复制前面几个 字符,那么最后的标志符“\0”,就不会被复制。这个时候在输出 dest的时候,因为找不到结束符“\0”,就不会一直往后输出,直到遇到’\0’为止。
#include<stdio.h> #include<string.h> int main(void) { char src[20] = "i love you mom"; char dest[20] = "\0"; memcpy(dest, src, 19); printf("dest = %s\n", dest); return 0; }
更多相关内容 -
C例子:字符串复制函数
2015-11-15 22:41:30该程序是我写的博客“一起talk C栗子吧(第六十回:C语言实例--字符串复制)”的配套程序,共享给大家使用 -
字符串复制函数strcpy()
2019-05-26 14:58:31strcpy是 string copy的缩写,即“字符串复制”。他的原型是: #include<stdio.h> char *strcpy(char *dest, const char *src); 功能是将指针变量src所指向的字符串复制到指针变量dest所指向的位置,dest和...两个字符串变量不可以使用“=”进行直接赋值,只能通用strcpy()函数进行赋值。strcpy是 string copy的缩写,即“字符串复制”。他的原型是:
#include<stdio.h> char *strcpy(char *dest, const char *src);
功能是将指针变量src所指向的字符串复制到指针变量dest所指向的位置,dest和src可以是字符数组名,也可以是字符指针变量名。src也可以是一个字符串常量。dest是destination的缩写,即“目的地”,src是source的缩写,即“源”。
#include<stdio.h> #include<string.h> int main(void) { char str[30]; strcpy(str, "i love you"); printf("%s\n", str); return 0; }
第一:程序中要想调用strcpy()函数,必须引入<string.h>,而puts()和gets()函数就不需要。
第二:strcpy()虽然也可以用于初始化,但与前面讲的初始化又有所不同。要想用strcpy()将一个字符串复制一个到字符数组中,那么字符数组在定义时长度一定要够大,要足够容纳被复制的字符串,如果不够,程序运行会出错,同样,在定义字符数组长度,一定要将结束标识符’\0’考虑进去,系统不会自动为’\0’分配内存单元的。
第三:如果定义的字符数组长度大于所要复制的字符串长度,那么字符数组剩下的没用完的内存单元就将继续保存原有的数据。
#include<stdio.h> #include<string.h> int main(void) { char str[20]; int i; strcpy(str, "i love you"); strcpy(str, "Lord"); for(i=0; i<11; ++i) { printf("%c", str[i]); } printf("\n"); return 0; }
-
C语言字符串复制函数strcpy()的编写与详解
2021-04-20 10:03:14strcpy,即string copy(字符串复制)的缩写。 原型声明:char *strcpy(char *dest, const char *src); 头文件:#include <string.h> 和 #include <stdio.h> 功能:把从src地址开始且含有NULL结束符的...strcpy,即string copy(字符串复制)的缩写。
原型声明:char *strcpy(char *dest, const char *src);
头文件:#include <string.h>
和#include <stdio.h>
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间。
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针(返回类型char*
)。不使用C/C++标准库函数,进行字符串复制函数的编写:
#include <stdio.h> #include <malloc.h> #include <assert.h> void stringcpy(char* to, const char* from) { assert(to != NULL && from != NULL); while (*from != '\0') { *to++ = *from++; } *to = '\0'; } int main(void) { char* t = (char*)malloc(15); char* f = (char*)malloc(15); stringcpy(f, "abcdefg"); stringcpy(t, f); printf("%s\n", t); printf("%c\n", t[0]); free(t); free(f); getchar(); return 0; }
运行结果:
详解:
① assert宏的原型定义在<assert.h>
中,其作用是如果它的条件返回错误,则终止程序执行。②
*to++ = *from++
先赋值再各自自增。
*p++
先执行++
再执行*
,分三步(*
和++
都是同级运算符,右结合)
(1)先执行p++
,因为是后置,先用p
;
(2)再执行*p
, 取p
所指的内容;
(3)最后再让p++
,让p
的地址加一个单位。
注意:++*p
和(*p)++
都是取p所指对象的值加1。③
*to = '\0'
补上结束符,否则会乱码,如图。
④char* t = (char*)malloc(15)
使用 malloc 向堆动态申请内存;由于 malloc 返回类型为(void*)
,故用(char*)
转换类型;char 为字符型变量,占1字节,此处申请了15字节的内存空间。
注意:若已不再使用,需要用 free 手动释放由 malloc 申请的内存,防止内存泄漏。⑤
sizeof(t)
的结果为4,sizeof() 是一种内存容量度量函数,功能是返回一个变量或者类型的大小(以字节为单位),对于32位编译器,char*
占4字节。⑥
strlen(t)
的结果为7,strlen() 截取'\0'
之前的字符串长度,其头文件为<string.h>
。⑦
getchar()
类似于C++中的system("pause")
,用于生成运行结果后暂停,方便查看结果,否则运行窗口会一闪而过,输入回车后即可关闭窗口。参考自《程序员面试宝典(第5版)》
-
C/C++字符串函数之复制函数详解
2021-01-20 06:42:47复制函数主要有4个,如下: 1、char * strcpy(char* destination,const char * source); 2、char* strncpy(char* destination,const char* source,size_t num); 3、void * memcpy(void* destination,const void* ... -
常见的字符串复制函数
2017-07-02 17:03:24功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。 返回指向dest的指针。 2.strcpy_s() _s函数是...1.strcpy()函数
原型声明:char strcpy(char dest, const char *src);功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。
2.strcpy_s()
_s函数是微软自己加的, 不是标准库, 最直观的是C++下, 该函数不在std命名空间下.
_s函数要求传递数组时(比如字符串)需要额外传递一个参数表示缓存长度以免出错.
在文件头部添加 #define _CRT_SECURE_NO_WARNINGS 1
即可关闭vs的警告。(为了跨编译器允许,一般不使用strcpy_s函数,但在vs中会有警告,故使用宏定义消除警告。)
注意,strcpy_s有两个版本,一个可以帮助我们自动推断缓冲区的大小,而另外一个不能帮助我们推断,因此在编译器不能推断缓冲区大小的时候,我们需要自己指定缓冲区的大小,如下面的程序所演示的那样。int main() { char sz[128] = {0}; strcpy_s( sz, "Hello World!" ); cout<< sz << endl; char* pSz2 = new char[128]; strcpy_s( pSz2, 128, "hello"); cout<< pSz2 << endl; delete pSz2; return 0; }
3 strnpy()
strncpy 是 C语言的库函数之一,来自 C语言标准库,定义于string.h,把src所指向的字符串中以src地址开始的前n个字节复制到dest所指的数组中,并返回dest。
函数原型char *strncpy(char *dest,char *src,size_t n);(c/c++)复制字符串src中的内容(字符,数字、汉字….)到字符串dest中,复制多少由size_tn的值决定。
如果src的前n个字符不含NULL字符,则结果不会以NULL字符结束。如果n小于src的长度,只是将src的前n个字符复制到dest的前n个字符,不自动添加’\0’,也就是结果dest不包括’\0’,需要再手动添加一个’\0’。
如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符长度+’\0’。一般情况下,使用strncpy时,建议将n置为dest串长度(除非你将多个src串都复制到dest数组,并且从dest尾部反向操作),复制完毕后,为保险起见,将dest串最后一字符置NULL,避免发生输出乱码问题。当然喽,无论是strcpy还是strncpy,保证dest串容量(能容纳下src串)才是最重要的。
4 strlcpy()
linux C语言标准库函数strlcpy,是更加安全版本的strcpy函数,在已知目的地址空间大小的情况下,把从src地址开始且含有’\0’结束符的字符串复制到以dest开始的地址空间,并不会造成缓冲区溢出。
函数原型声明:size_t strlcpy(char *dst, const char *src, size_t size)
功能: 在已知dest缓冲区大小并不会造成缓冲区溢出前提下,将src地址开始的字符串复制到以dest开始的地址空间
返回值:src字符串的大小
函数参数:参数dst为目的字符串开始的指针,src为源字符串的开始地址,参数size代表dst字符串的大小 -
C++字符串复制函数
2016-10-20 15:44:28今天用到字符串的复制操作,做一个以二进制的形式读一个文件,以16进制写到TXT中,再以十六进制转换成二进制写回原文件。达到复制文件的效果,同时用的是...strcpy:顾名思义,复制一个字符串,函数原型为:1、char * st -
C语言上机实验 | 《定义函数strmcpy(s,t,m),实现字符串复制》
2021-11-09 14:59:55字符串复制。输入一个字符串t和一个正整数m,将字符串t中从第m个字符开始的全部字符复制到字符串s中,再输出字符串s。要求用字符指针定义并调用函数strmcpy(s,t,m),它的功能是将字符串t中从第m个字符开始的全部字符... -
自己编写字符串复制函数
2015-03-23 19:53:31#include #include #include <assert.h>char *my_strcpy(char *dest, const char *src){ char *ret = dest; assert((dest != NULL) && (src != NULL)); //断言 if(dest == src) -
函数实现字符串复制
2021-06-19 11:16:00使用函数实现字符串复制:输入一个字符串t和正整数m,将字符串t中从第m个字符开始的全部字符复制到字符串s中,再输出字符串s。 要求自定义并调用函数void strmcpy(char *s,char *t,int m).编写相应程序。 输入输出... -
c语言实现姓名排序———字符串复制函数,字符串比较函数
2021-12-07 16:33:54函数介绍 1.strcmp(字符数组1,字符数组2或字符常量): 比较两个字符串大小,它是按照ASCII码值的顺序...将字符数组2的字符串(包括结束标识符'\0')复制到字符数组2中。 (第一个数组长度必须足以容纳第二个字符串长 -
【C/C++】字符串函数之复制函数
2019-04-30 16:54:29C/C++字符串复制函数: C/C++字符串函数的头文件:string.h 复制函数主要有4个,如下: 1、char * strcpy(char* destination,const char * source); 2、char* strncpy(char* destination,const char* source,... -
C语言中字符串相关的拷贝函数
2022-04-03 22:09:50C语言下字符串拷贝函数汇总对比 1.1、strcpy 函数原型char *strcpy(char *dest, const char *src) 需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况,所以在实际使用一定... -
【C/C++】C语言复制字符串及复制函数汇总(strcpy()/memcpy()/strncpy()/memmove())
2021-10-19 22:25:10头文件:#include <string.h> 定义函数:char *strcpy(char *dest, const char *src);...函数说明:strcpy()会将参数src 字符串拷贝至参数dest 所指的地址。 返回值:返回参数dest 的字符串起始地址。 -
编写字符串复制函数
2011-08-03 10:24:59编写字符串复制函数 字符串复制函数看似简单,但隐藏了一些容易被忽略的细节,这些细节恰恰也是平时工作中的隐藏的BUG所在,一旦发生很难察觉,而且这也是各大企业在招聘的时候重要的考点。下面说明一下。 问题:... -
不调用C++/C字符串库函数,实现字符串复制函数strcpy
2017-10-31 19:03:25已知strcpy的函数原型:char *strcpy(char *strDest,const char *...不调用C++/C的字符串库函数,实现字符串复制函数strcpy。 一种方法: char *strcpy(char *strDest, const char *strSrc)//源字符串参数用const修 -
c++实现字符串复制函数strcpy()
2014-07-29 21:52:25#include #include using namespace std; char *str_cpy(char *dest,char s[]) { char *p=s; char *q=dest; int m=strlen(s); while(m--!=0) { *q++=*p++; } *q='\0';...in -
指针 字符串的复制(函数)
2021-12-23 23:34:26编写自定义函数把一个字符串(不超80字符)的内容复制到另一个字符数组中。主函数输入一串字符,复制到另一个数组中输出。... -
字符串的复制,将一串字符串复制到另一串字符串中 c语言简单易懂
2021-04-07 14:19:32//① 题目叙述:编写一个函数_strcpy,其功能为将字符串 src 拷贝到字符数组 //target,函数原型声明为:void _strcpy(char* target, char* src); //② 在 main()函数中接收用户输入的一个字符串(不超出 256 个... -
字符串函数讲解(C语言笔记,建议收藏!!!)
2021-06-20 14:25:311、gets函数 2、puts函数 3、strcat函数 4、s't'r'c'p'y -
C语言函数库之字符串拷贝函数(string.h)
2021-01-29 11:29:401.字符串拷贝函数strcpy 函数定义: char *strcpy(char *str1, const char *str2); 函数功能:把字符串str2(包括'\0')拷贝到字符串str1当中,并返回str1。 举例: #include<stdio.h> #include<string.h&... -
自行设计函数实现字符串复制
2019-01-04 09:20:09字符串复制。 输入一个字符串t和一个正整数m,将字符串t中从第m个字符开始的全部字符复制到字符串s中,再输出字符串s。 要求用字符指针定义并调用函数strmcpy(s,t,m),它的功能是将字符串t中从第m个字符开始的全部... -
java 字符串 复制_Java字符串复制
2020-07-12 11:14:52java 字符串 复制Sometime back I was asked how to copy a String in java. As we know that String is an immutable object, so we can just assign one string to another for copying it. If the original ... -
使用函数实现字符串部分复制
2022-01-02 20:30:32函数strmcpy将输入字符串char *t中从第m个字符开始的全部字符复制到字符串char *s中。若m超过输入字符串的长度,则结果字符串应为空串。 裁判测试程序样例: #include <stdio.h> #define MAXN 20 void ... -
strcpy函数复制字符串
2019-08-03 16:00:44strcpy函数是复制字符串的,拥有两个参数,一个是被复制字符串,另一个是新字符串。 原型:void strcpy(char *des,char *src,int len) #include <stdio.h> #include <string.h> void myStrNCpy(char *... -
编写字符串复制函数strcpy及memcpy函数
2010-11-07 21:18:00Strcpy与memcpy两函数的经典实现,哈哈,不过,不是偶写的!^_^………… char *strcpy(char *des, const char *src){ assert((des != NULL) && (src != NULL)); char *add = des;... -
C语言:自定义函数实现对字符串的复制
2020-05-09 18:10:07主函数负责定义两个字符数组并给其中一个赋值,通过调用函数实现将一个字符串复制到另一个字符数组中 #include <stdio.h> void f(char*str1,char*str2)//函数名为f,自定义字符串连接函数 { int i=0; while... -
C语言程序设计-用函数实现字符串的复制, 不允许用strcpy()函数.c
2021-10-31 11:03:04C语言程序设计-用函数实现字符串的复制, 不允许用strcpy()函数.c -
strcpy函数(复制字符串)
2020-01-30 23:57:37strcpy(字符串复制) 定义:strcpy是一种C语言的标准库函数,strcpy把含有’\0’结束符的字符串复制到另一个地址空间,返回值的类型为char*。 功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的...