精华内容
下载资源
问答
  • 字符串复制函数strcpy
    万次阅读
    2019-05-26 14:58:31

    两个字符串变量不可以使用“=”进行直接赋值,只能通用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;
    }
    
    更多相关内容
  • strcpy,即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版)》

    展开全文
  • 非常详细的字符串拷贝函数的实现

    实现字符串拷贝函数时,一定要分清楚源头的字符串和目的字符串,两者的位置不同,首先是方法1:

    #include<stdio.h>
    #include<assert.h>
    void my_strcpy(char* arr1,const char* arr2)//源头字符串的内容不发生改变
    {
        assert(arr1 != NULL);
        assert(arr2 != NULL);//确保指针的有效性
        while (*arr2)//当*arr2='\0'时停止循环
        {
            *arr1 = *arr2;
            arr1++;
            arr2++;
        }
        *arr1 = *arr2;//将最后的'\0'拷贝到目的字符串中
    }
    int main()
    {
        char arr1[] = "abcdef";
        char arr2[] = "hello";
        my_strcpy(arr1,arr2);
        printf("%s ", arr1);
        }

     方法2:简化代码

    #include<stdio.h>
    #include<assert.h>
    void my_strcpy(char* arr1,const char* arr2)//源头字符串的内容不发生改变
    {
        assert(arr1 != NULL);
        assert(arr2 != NULL);//确保指针的有效性
        while (*arr1++=*arr2++)//简化代码,直到拷贝到'\0'才停止
        {
        ;
        }
    }
    int main()
    {
        char arr1[] = "abcdef";
        char arr2[] = "hello";
        my_strcpy(arr1,arr2);
        printf("%s ", arr1);
        }

     

    展开全文
  •   在C语言中拷贝字符串的时候可以直接使用库函数strcpy()来进行操作。下面通过一个例子来演示它的使用方法。 int main(int argc, char *argv[]) { char str1[10] = "abcdefg"; char str2[7] = "123456"; int ...

    strcpy()函数

      在C语言中拷贝字符串的时候可以直接使用库函数strcpy()来进行操作。下面通过一个例子来演示它的使用方法。

    int main(int argc, char *argv[])
    {
    	char str1[10] = "abcdefg";
    	char str2[7] = "123456";
    	int ret = 0;
    	
    	puts(str1);
    	puts(str2);
    	
    	strcpy(str1,str2);	
    	
    	puts(str1);
    	puts(str2);
    	
    	system("pause");
    	return 0;
    }
    

      定义了两个字符串,首先打印两个字符串的内容,然后使用strcpy()函数将字符串2拷贝到字符串1中去。输出结果如下:
    在这里插入图片描述
      通过结果可以看出,字符串1内的内容全部被字符串2替换了。在拷贝数据的时候要注意一点,要确保字符串1的空间能够存储下字符串2,strcpy()函数在拷贝数据的时候是不会自动检测字符串1的空间大小的。如果字符串1的空间不能够完全容纳字符串2的字符,那么多余的字符可能就会覆盖到内存其他空间中去,导致程序异常。

    strncpy()函数

      为了解决strcpy()函数在拷贝数据不能自动检测字符串1空间大小的问题,在拷贝数据的时候可以使用 strncpy()函数,这个函数比strcpy()函数多了一个参数,第三个参数就是要拷贝数据的大小。通过第三个参数来限制拷贝的字符长度,从而避免数据溢出的问题。

    int main(int argc, char *argv[])
    {
    	char str1[6] = "abc";
    	char str2[] = "1234567890";
    	int ret = 0;
    	
    	puts(str1);
    	puts(str2);
    	
    	ret = sizeof(str1);
    	printf("%d\r\n",ret);
    	
    	strncpy(str1,str2,ret);	
    	
    	puts(str1);
    	puts(str2);
    	
    	system("pause");
    	return 0;
    }
    

      在拷贝数据的时候,首先通过sizeof()函数计算字符串1的空间大小,然后使用strncpy()函数拷贝数据的时候,用字符串1空间大小减1作为第三个参数,由于字符串的最后一位必须是空字符’\0’,而sizeof()函数在计算字符串大小的时候会把最后一空字符也计算进去,所以在设置拷贝字符长度的时候,必须给字符串1预留一位来存放空字符。

      打印结果如下:
    在这里插入图片描述
      字符串1的长度为6,预留一位空字符后,可拷贝的字符空间大小为5,所以拷贝字符串2到字符串1中去的时候,就只拷贝5个字符,保证了拷贝的字符不会出现溢出情况。

      由此可见使用strncpy()函数拷贝字符串的时候会更加安全。

    展开全文
  • [C语言]编写字符串复制函数strcpy(s1,s2)。方法①,用数组方法。方法②,用指针方法。
  • 已知strcpy的函数原型:char *strcpy(char *strDest,const char *...不调用C++/C的字符串库函数,实现字符串复制函数strcpy。  一种方法: char *strcpy(char *strDest, const char *strSrc)//源字符串参数用const修
  • 实现自己的字符串拷贝函数Strcpy

    千次阅读 2016-05-13 08:39:15
    strcpy是C语言的库函数,用于完成字符串的拷贝,很多笔试面试过程中要求我们自己实现这个函数字符串拷贝本身并没有太多技巧,可以利用最后的'\0'作为界限,用循环完成拷贝,代码如下 char *Strcpy(char *strDst, ...
  • (四)字符串复制函数 strcpy() 函数调用格式:strcpy(str1,str2); //已过时 //Error C4996 :'strcpy': This function or variable may be unsafe. //Consider using strcpy_s instead. //To disable deprecation, use...
  • strcpy是C++语言的一个标准函数strcpy把含有’\0’结束符的字符串复制到另一个地址空间。 strcpy的头文件:string.h 一、认识并使用strcpy函数 1.库函数中strcpy函数的声明 char* strcpy(char* destination,const...
  • strcpy函数复制字符串

    千次阅读 2019-08-03 16:00:44
    strcpy函数复制字符串的,拥有两个参数,一个是被复制字符串,另一个是新字符串。 原型:void strcpy(char *des,char *src,int len) #include <stdio.h> #include <string.h> void myStrNCpy(char *...
  • strcpy(1,2):将字符串2复制字符串1,并返回字符串1`` #include <iostream> #include<cstdio> #include<cstring> using namespace std; char a[200],b[200]; int main() { char *p1,*p2; ...
  • Strcpy与memcpy两函数的经典实现,哈哈,不过,不是偶写的!^_^…………   char *strcpy(char *des, const char *src){  assert((des != NULL) && (src != NULL));  char *add = des;...
  • 字符串复制函数strcpy的实现算法

    千次阅读 2015-09-05 12:08:27
    1,字符串复制,需要考虑三种情况: 目的字符串未被赋值,本身是个空串,源字符串存在。目的字符串长度m大于或等于源字符串长度n,此时复制时,源字符串代替目的字符串前n个字符,目的字符串后m-n个字符扔被保留...
  • 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
  • 头文件:#include 功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。函数实现: ...
  • 今天来模拟实现strcpy()函数,该函数所实现的功能是拷贝字符串 先来分析一下:字符串的拷贝不能使用‘=’直接赋给,而需要调用函数来进行逐个字节的拷贝,函数参数应为两个char类型的指针 下面是我写的初稿: ...
  • C语言:strcpy()---字符串复制

    千次阅读 多人点赞 2021-09-01 20:15:39
    把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间 4. 头文件 #include <string.h> #include <stdio.h> 5. 返回值 返回指向dest的指针。 二、strcpy()用法 strcpy()函数可.
  • strcpy的自实现 #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { char firstName[30] = "jim"; char lastName[30] = "Green"; char* p = firstName; char* q = lastName; while (1) { if ...
  • 此处将source中的字符串结束标志符‘\0’也一同复制。所以在输出时,切不可以用‘\0’,puts,printf输出 #include<stdio.h> #include<string.h> void main() { char str1[]="coffee"; char str2[]=...
  • //有一字符串,编写一函数,将此字符串从第m个字符开始的全部字符复制成另一个字符串//#include#includeint main() {char string1[100];char string2[100];char string3[100];char *p1=string1;char *p2=string2;int...
  • 从键盘输入一个字符串a,将字符串a复制字符串b中,再输出字符串b,即编程实现字符串处理函数strcpy()的功能,但要求不能使用字符串处理函数strcpy()。 **输入提示信息:"Input a string:" **输入格式要求:用gets...
  • strcpy函数复制字符串

    千次阅读 2020-01-30 23:57:37
    strcpy字符串复制) 定义:strcpy是一种C语言的标准库函数,strcpy把含有’\0’结束符的字符串复制到另一个地址空间,返回值的类型为char*。 功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的...
  • 我们首先来考虑一个简单的问题,我们定义了一个字符串,然后想要复制这个字符串,在C语言中,我们可以用和来实现,假如我们用指针来操作 这样pts2只是复制字符串str1的地址,而不是复制整个字符串。那么如何进行整个...
  • 复制函数主要有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* ...
  • 字符串拷贝函数strcpy()

    千次阅读 2016-07-27 17:19:43
    #include #include<stdio.h>char * my_strcpy( char *des,const char src); char * my_strcpy( char *des,const char *src) { if(NULL == src || NULL == des) { return NULL; } ch
  • 该程序是我写的博客“一起talk C栗子吧(第六十回:C语言实例--字符串复制)”的配套程序,共享给大家使用
  • 字符串函数strcpy

    2016-10-23 20:48:58
    strcpy字符串复制函数,作用是将字符串2复制到字符数组1中去。 说明: 1.字符数组1必须定义得足够大,以便容纳被复制的字符串; 2.“字符数组1”必须写成数组名形式(如str1),“字符串2”可以是字符数组名,...
  • C语言程序设计-用函数实现字符串复制, 不允许用strcpy()函数.c
  • strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符'\0'。已知strcpy函数的原型是:char* strcpy(char* dest, const char* src); memcpy提供了一般内存的复制。即memcpy对于需要复制...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,920
精华内容 16,368
关键字:

字符串复制函数strcpy