精华内容
下载资源
问答
  • c++实现strcpy函数
    2022-05-02 19:49:49

    1.strcpy函数

    最近看c++相关的内容,看到了strcpy函数相关,然后就想起来一件陈年往事。
    还是很多年前,本人刚毕业校招出去面试,去了当时的某国民搜索引擎公司。负责面试的老哥上来让我手撕code,说写个字符串的实现吧。我说这不很简单?python直接一个赋值就搞定了?java不也是一个赋值搞定?然后老哥自言自语,哦你没写过c++啊,那这确实不好弄,咱们换道题把。

    当时的我,确实coding比较少。最主要的是,确实基本没搞过c++,所以也没get到老哥的点。现在想想,那时候也真的是…

    不过毕业以后工作好些年,基本上也没咋弄过c++。毕竟模型的技术栈,数据的技术栈,除了做后端架构对性能要求比较高的场景,确实接触c++的机会不多。不过多年以后,还是要学习一下。这也算是有生之年逃不过系列吧。

    2.strcpy函数签名

    我们看看strcpy在string.h中的函数签名

    char	*strcpy(char *__dst, const char *__src);
    

    其中,dst是存储复制内容的目标指针,src是被复制的字符串指针,加上const修饰表示src不能被修改。

    先试试strcpy库函数的效果。

    void copy_library() {
        const char src[] = "abcdefgh";
        char dest[sizeof(src)];
        strcpy(dest, src);
        cout<<dest<<endl;
    }
    

    注意如果src是指针,dest指定大小的时候就不能用sizeof(src),因为sizeof(src)的大小为指针大小恒为8。

    3.自己实现strcpy函数

    下面我们自己来实现strcpy函数。

    char* copy_string(const char* src, char dest[]) {
        if (src==NULL || dest==NULL) {
            return NULL;
        }
        int i=0;
        while(*src != '\0') {
            dest[i++] = *src++;
        }
        dest[i] = '\0';
        return dest;
    }
    

    首先做异常值处理,如果src或者dest任意一个指针为NULL,返回值为NULL。
    然后开始进行复制操作。
    while(*src != ‘\0’) 这一句,表示终止条件,因为src是以字符数组进行存储,且以’\0’结尾。所以在遇到’\0’字符前,说明字符串都要进行复制。

    重点看看dest[i++] = *src++这一句。
    前面我们已经分析过,*src++表示取src指针当前位置的值,然后指针位置进行自加1。所以这一句的意思是,将src当前位置取值并赋值给dest[i],并且src与dest位置都自增1。

    最后,当src遇到’\0’字符,说明此时字符串结束,那么给dest也叫上’\0’字符表示字符串结束。

    void copy_string_imp() {
        const char* src = "abcdefg";
        int i=0;
        while(src[i] != '\0') {
            i++;
        }
        char dest[i+1];
        copy_string(src, dest);
        cout<<dest<<endl;
    }
    

    以上是复制的实现。

    输入为src字符串,用指针表示。
    因为是用指针表示,所以不能直接用sizeof求大小,需要先求出字符串的长度i。
    然后将dest分配大小,注意大小是i+1,因为src计算长度i时,没有将’\0’字符算进去。
    最后调用我们上一个实现方法即可。

    在main方法中调用

    int main(int argc, char const *argv[])
    {
        copy_string_imp();
        return 0;
    }
    

    输出为

    abcdefg
    

    即实现了字符串的复制。

    4.p[i] 与*(p+i)

    另外一个小的点值得注意一下:
    p[i]与*(p+i)的意义完全一样,均表示数组第i个元素值。没有什么逻辑,取下标语法就是如此规定。

    更多相关内容
  • 本篇文章介绍了,自己实现strcpy函数的实现方法。需要的朋友参考下
  • C++中strcpy函数的实现

    2020-09-03 06:20:43
    strncpy这个可以指定拷贝字符的长度,指定源地址,目标地址,还有需要拷贝的字符的长度;strcpy只能传入两个参数,只指定拷贝的起始地址跟目标地址,然后整体拷贝;
  • 本篇文章介绍了c++中strcpy函数在VS2015无法使用的问题。 一:原因:一般认为是vs准备弃用strcpy的,安全性较低,所以微软提供了strcpy_s来代替 然而,strcpy_s并没有strcpy好用,我们要想继续在VS2015中使用strcpy...
  • strcpy函数

    2013-04-27 01:23:21
    strcpy函数的编写 C++ VS2010 源代码
  • c代码-重写strcpy函数

    2021-07-16 11:55:11
    c代码-重写strcpy函数
  • 编写一个程序,将字符数组s2中的全部字符拷贝到字符数组s1中,不能使用strcpy函数。拷贝时,'\0'也要拷贝过去。 (代码提示:for(i=0;i(s2);i++) s1[i]=s2[i];)
  • 目录 一.strcpy 函数简介 二.strcpy 函数实战 ...C 语言在 string.h 中strcpy函数,可用完成 char 字符串拷贝,语法如下: /* *描述:此类函数是用于对字符串进行复制(拷贝)。 * *参数: * [in] s

    目录

    零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

    一.strcpy 函数简介

    C 语言string.hstrcpy函数,可用完成 char 字符串拷贝,语法如下:

    /*
    *描述:此类函数是用于对字符串进行复制(拷贝)。
    *
    *参数:
    *   [in] strSource:需要拷贝的字符串
    *   [out] strDestination:拷贝完成之后的字符串
    *
    *返回值:指向 strDestination 这个字符串的指针
    */
    char* strcpy(char* strDestination, const char* strSource);
    

    注意:

    1.strcpy 函数在拷贝过程中,如果遇到'\0'结束符,那么直接结束拷贝

    2.如果使用 strcpy 函数提示 error:4996,请参考:error C4996: ‘fopen’: This function or variable may be unsafe

    error C4996: 'strcpy': This function or variable may be unsafe.
    Consider using strcpy_s instead. To disable deprecation,
    use _CRT_SECURE_NO_WARNINGS. See online help for details.
    

    3.必须保证 strDestination 空间足够大,能够容纳 strSource,如果 strDestination 内存空间大小比 strSource 更小,会导致溢出错误,引起程序崩溃!可以通过 sizeof 函数查看内存内存大小,举个例子:50ml 的水杯能倒进500ml的水杯没问题,500ml 的水杯倒进 50ml 的水杯,会溢出很多水;

    二.strcpy 函数实战

    1.strcpy 函数简单使用

    /******************************************************************************************/
    //@Author:猿说编程
    //@Blog(个人博客地址): www.codersrc.com
    //@File:C语言教程 - C语言 strcpy 函数
    //@Time:2021/06/03 08:00
    //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    /******************************************************************************************/
    #include "stdafx.h"
    #include<stdlib.h>
    #include<stdio.h>
    #include<string.h>
    #include "windows.h"
    //error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    #pragma warning( disable : 4996)
    void main()
    {
        char src[1024] = { "C/C++教程-strcpy函数 - www.codersrc.com" };
        char dst[1024] = { 0 };
        printf("strcpy之前 dst:%s\n", dst); //空字符串
        strcpy(dst, src);
        printf("strcpy之后 dst:%s\n", dst);//
        printf("\n");
        system("pause");
    }
    /*
    输出:
    strcpy之前 dst:
    strcpy之后 dst:C/C++教程-strcpy函数 - www.codersrc.com
    请按任意键继续. . .
    */
    

    2.strcpy 函数拷贝内容以’\0’结尾

    char 字符串中有作介绍,字符串默认都是 '\0' 结尾,strcpy 函数在拷贝过程中,如果遇到'\0' 结束符,那么直接结束拷贝,看下面例子:

    /******************************************************************************************/
    //@Author:猿说编程
    //@Blog(个人博客地址): www.codersrc.com
    //@File:C语言教程 - C语言 strcpy 函数
    //@Time:2021/06/03 08:00
    //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    /******************************************************************************************/
    
     char src[1024] = { "C/C++教程-strcpy函数\0 - www.codersrc.com" };
        char dst[1024] = { 0 };
        printf("strcpy之前 dst:%s\n", dst);
        strcpy(dst, src);
        printf("strcpy之后 dst:%s\n", dst);
        printf("\n");
        system("pause");
    /*
    输出:
    strcpy之前 dst:
    strcpy之后 dst:C/C++教程-strcpy函数
    请按任意键继续. . .
    */
    

    重上面的输出结果可以看出:strcpy 函数在拷贝的时候,如果遇到 '\0',那么拷贝直接结束,所以上面使用 strcpy 拷贝的时候,dst 字符串明显少了一段字符" - www.codersrc.com";

    3.strcpy 函数注意崩溃问题

    如果使用 strcpy 的时候 strDestination 内存大小比 strSource 内存大小更小,程序运行会崩溃,strcpy 函数在字符串拷贝的时候并不会检查两个字符串大小,举个例子:

    /******************************************************************************************/
    //@Author:猿说编程
    //@Blog(个人博客地址): www.codersrc.com
    //@File:C语言教程 - C语言 strcpy 函数
    //@Time:2021/06/03 08:00
    //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    /******************************************************************************************/
    
    
    #include "stdafx.h"
    #include<stdlib.h>
    #include<stdio.h>
    #include<string.h>
    #include "windows.h"
    //error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    #pragma warning( disable : 4996)
    void main()
    {
        char src[1024] = { "C/C++教程-strcpy函数\0 - www.codersrc.com" };
        char dst[10] = { 0 };
        int len_src = sizeof(src)/sizeof(char); // 1024
        int len_dst = sizeof(dst) / sizeof(char); //10
        printf("len_src:%d len_dst:%d\n", len_src,len_dst);
        printf("strcpy之前 dst:%s\n", dst);
        strcpy(dst, src);  // 很明显 dst 的空间大小并不能完全存放 src
        printf("strcpy之后 dst:%s\n", dst);
    }
    /*
    输出:
    len_src:1024 len_dst:10
    */
    

    三.猜你喜欢

    1. 安装 Visual Studio
    2. 安装 Visual Studio 插件 Visual Assist
    3. Visual Studio 2008 卸载
    4. Visual Studio 2003/2015 卸载
    5. 设置 Visual Studio 字体/背景/行号
    6. C 语言格式控制符/占位符
    7. C 语言逻辑运算符
    8. C 语言三目运算符
    9. C 语言逗号表达式
    10. C 语言自加自减运算符(++i / i++)
    11. C 语言 for 循环
    12. C 语言 break 和 continue
    13. C 语言 while 循环
    14. C 语言 do while 和 while 循环
    15. C 语言 switch 语句
    16. C 语言 goto 语句
    17. C 语言 char 字符串
    18. C 语言 strlen 函数
    19. C 语言 sizeof 函数
    20. C 语言 sizeof 和 strlen 函数区别
    21. C 语言 strcpy 函数

    未经允许不得转载:猿说编程 » C 语言 strcpy 函数

    展开全文
  • 写一个函数,将一个字符串中的元音字母复制到另一字符串,然后输出。 以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同进步。——来自考研路上的lwj 一、解题思路 思路: 核心思路就是这句代码:while ...

    题目

    实现strcpy函数的功能,不使用strcpy函数。

    以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同进步。——来自考研路上的lwj

    一、解题思路

    思路:
    核心思路就是这句代码:while (s1[i] = s2[i++]),判断条件是第二个字符串不为\0,而且这条语句执行到第二个字符串结尾时,\0也会被复制到第一个字符串中,把这句代码理解了就行了。

    二、代码部分

    1.引入库

    代码如下(示例):

    #include<stdio.h>
    

    2.主函数部分

    代码如下(示例):

    void mystrcat(char s1[], char s2[])
    {
    	int i=0, j=0;
    	while (s1[++i]);//先使i遍历到s1的末尾位置
    	while (s1[i++] = s2[j++]);//开始字符串拷贝,这条语句执行完后,s2中的\0也会被拷贝到s1中。
    }
    void main()
    {
    	char s1[128], s2[50];
    	printf("请输入两个需要连接的字符串:\n");
    	gets(s1);
    	gets(s2);
    	mystrcat(s1, s2);
    	puts(s1);
    }
    
    

    三、执行结果

    在这里插入图片描述

    输入:

    AB
    SBC
    

    输出:

    SBC
    
    展开全文
  • 大家好,我是真的王,今天我来分享一下用C语言模拟实现strcpy函数。 文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 我们知道strcpy函数是用来拷贝字符串。以下是...

    大家好,我是真的王,今天我来分享一下用C语言模拟实现strcpy函数。

    文章目录


    前言

    我们知道strcpy函数是用来拷贝字符串。以下是strcpy的定义:


    一、实现

     我们先看函数传递的参数,是两个指针,一个是strSource(字符串的源头),另一个是strDestination(字符串的目的地),因此,我们也需要传递两个指向字符串地址的指针。

    而我们知道库里的strcpy函数会传递源头字符串末尾的'\0',因此我么可以这样来写代码。

    代码如下:

    #include<stdio.h>
    void my_strcpy(char* dest, char* sou)
    {
    	while (*sou != '\0')
    	{
    		*dest = *sou;
    		dest++;
    		sou++;
    	}
    }
    int main()
    {
    	char arr1[] = "Hello World!";
    	char arr2[] = "***************";
    
    	my_strcpy(arr2, arr1);
    
    	return 0;
    }

     这种写法只能模拟基本功能,如果满分为10分,上述代码只能得5分,还有很多的优化空间。

    二、优化

    我们根据后置++的特性,以及'\0'的本质为0,我么们可以将判断和循环条件同时改变。

    代码如下:

    #include<stdio.h>
    void my_strcpy(char* dest, char* sou)
    {
    	while (*dest++=*sou++)
    	{
    		;
    	}
    }
    int main()
    {
    	char arr1[] = "Hello World!";
    	char arr2[] = "***************";
    
    	my_strcpy(arr2, arr1);
    
    	return 0;
    }

     然而这串代码有一个致命缺陷,我们可能会一不小心将来源与目的地的指针传成空指针,导致函数错误

    这时我们想到可以加入’‘断言’‘

    #include<stdio.h>
    #include<assert.h>
    void my_strcpy(char* dest, char* sou)
    {
    	assert(dest && sou);
    
    	while (*dest++=*sou++)
    	{
    		;
    	}
    }
    int main()
    {
    	char arr1[] = "Hello World!";
    	char arr2[] = "***************";
    
    	my_strcpy(arr2, arr1);
    
    	return 0;
    }

    当我们传错参时它会提醒我们。

    我们可能会更加粗心,直接将目的地与来源的指针传反,这时我们可以使*sou的值不能改变来避免。我们可以使用const来修饰sou

    #include<stdio.h>
    #include<assert.h>
    void my_strcpy(char* dest,const char* sou)
    {
    	assert(dest && sou);
    
    	while (*dest++=*sou++)
    	{
    		;
    	}
    }
    int main()
    {
    	char arr1[] = "Hello World!";
    	char arr2[] = "***************";
    
    	my_strcpy(arr2, arr1);
    
    	return 0;
    }

    当我们仔细查看strcpy函数的定义是发现strcpy函数是有返回值的,返回类型为char*。strcpy函数的返回值我们可以形成函数的链式访问

    #include<stdio.h>
    #include<assert.h>
    char * my_strcpy(char* dest,const char* sou)
    {
    	assert(dest && sou);
    	char* ret = dest;
    	while (*dest++=*sou++)
    	{
    		;
    	}
    	return ret;
    }
    int main()
    {
    	char arr1[] = "Hello World!";
    	char arr2[] = "***************";
    
    	printf("%s", my_strcpy(arr2, arr1));
    
    	return 0;
    }


    总结
    以上就是今天要讲的内容,本文仅仅简单介绍了strcpy函数的模拟。路漫漫其修远兮啊!!!!

    展开全文
  • strcpy函数的实现

    2022-03-10 13:09:24
    strcpy函数是字符串拷贝函数,参数为2个字符串的首地址 即strcpy(char* destination,const char* source),我们要把源头的字符串拷贝到目的地里面去,目的地字符串要被源头字符串替换,所以目的地字符串应该是可以...
  • strcpy函数的用法

    万次阅读 多人点赞 2021-03-01 13:05:35
    下面我来介绍一下strcpy函数的作用,主要用于char和string等数据类型,函数公式 strcpy(标识符,标识符);//copy char2 to char1 在我的认识里,可以理解为把一个变量赋值给另一个变量位置,请看下面的代码 #...
  • C语言中strcpy函数的实现

    千次阅读 2022-03-11 17:24:41
    首先,我们要知道的是strcpy函数是c语言中的一个库函数。调用它时需要引用头文件#include <string.h> 其作用是复制一个字符串.并且只能将一个短的字符串复制到一个长的字符串里面去。 在creference中给出的...
  • C++ strcpy函数

    2022-02-28 11:32:20
    函数声明:char *strcpy(char* dest, const char *src); 把以src为首地址NULL为结束符的数据复制到已dest开始的地址,但是,src与dest空间不能有重叠,且dest必须有足够的空间。 C++提供strcpy此类函数,为了对...
  • 实现strcpy函数

    千次阅读 2021-03-18 20:30:42
    实现strcpy函数 假如有一个字符指针dest指向一个字符串 “abcdef”,另一个字符指针src指向另一个字符串“123”,现在需要把“123”拷贝到“abcdef”里。1替换a,2替换b,c替换d,最后’\0’替换d。我们可以写出以下...
  • c语言编写strcpy函数的方法1、搭建基本的C语言程序框架,注意添加#include头文件2、定义两个字符数组3、strcpy函数原型:char *strcpy(char *dest, const char *src);strcpy把从src地址开始且含有'\0'结束符的字符串...
  • C语言strcpy函数的使用

    万次阅读 多人点赞 2020-04-19 11:00:53
    strcpy简单使用: #include <stdio.h> #include <string.h> struct Student { int sid; char name[20]; int age; } st; //此处分号不可省略 int main(void) { struct Student st = {1000,...
  • strcpy函数的作用是把含有“'\0'”结束符的字符串复制到另一个地址空间。strcpy是一种C语言的标准库函数,返回值的类型为“char*”;strcpy是“string copy”(字符串复制)的缩写。strcpy,即string copy(字符串复制)...
  • C语言编写strcpy函数

    2021-02-23 09:58:54
    char *strcpy1(char *dest,char *src); int main(int argc, const char *argv[]) { char a[10]; char b4=“ttt”; char c[5]=“1234”; char *add1=strcpy1(a,“ttt”); puts(a); char *add2=strcpy1(a,c); printf(...
  • strcmp函数、strcpy函数在c语言中的作用关注:292答案:6信息版本:手机版解决时间 2019-01-14 07:52做自己de王妃2019-01-14 02:00strcmp函数、strcpy函数在c语言中的作用最佳答案雾月2019-01-14 03:23strcmp函数是...
  • strcpy函数的作用是是什么?

    千次阅读 2021-05-25 02:21:00
    strcpy函数的作用:对字符串进行复制(拷贝),把含有“\0”结束符的字符串复制到另一个地址空间,返回值的类型为“char*”。在C语言函数中:头文件:#include 和 #include 原型声明:char* strcpy(char* ...
  • strcpy函数的作用是什么

    万次阅读 2021-08-19 00:11:55
    strcpy函数的作用是复制字符串。C 库函数 char *strcpy(char *dest, const char *src) 把 src 所指向的字符串复制到 dest。需要注意的是...
  • 函数 strcpy 的原型是: char* strcpy(char* des , const char* src); 调用 strcpy 函数,将 src 所指向的字符串复制到 dest 所指向的地址空间,同时返回复制后的字符串。 注意:des 和 src 所指内存区域不可以重叠...
  • strcpy函数的原型是char *strcpy(char *strDest, const char *strScr){char *address=strDest;assert((strDest != NULL) && (strScr != NULL)); //是判断传进来的指针是否为空 如果为空返回一个错误值while...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 160,918
精华内容 64,367
关键字:

strcpy函数

友情链接: 115一键转存.user.rar