strcpy的实现

 1 //
 2 //  Strcpy.c
 3 //  libin
 4 //
 5 //  Created by 李宾 on 15/8/20.
 6 //  Copyright (c) 2015年 李宾. All rights reserved.
 7 //
 8
 9 #include <stdio.h>
10 #include <assert.h>
11 #include <string.h>
12 /***********************************************不考虑覆盖*****************************************/
13 char * Strcpy1(char *dst, const char *src)//const 在*号左边,指的是指针所指向的内容为常量,不允许修改。
14 {
15     assert(dst != NULL && src != NULL);   //判断指针是否为空,条件为假,中断程序。
16
17     char *ret = dst;
18
19     while((*dst++ = *src++)!=‘\0‘);
20
21     return ret;                        //返回dst是为了支持链式表达式。例如:int l=strlen(strcpy(strA,strB));
22 }
23
24
25
26 /**********************************************考虑内存重叠******************************************/
27 char *my_memcpy(char *dst, const char* src, int len)
28 {
29     char * ret = dst;
30     int n = len + 1;
31     if (dst>=src && dst <= src+len)
32     {
33         dst = dst + len;
34         src = src + len;
35         while (n --)
36         {
37             *dst-- = *src--;
38         }
39     }
40     else
41         while (n--)
42         {
43             *dst++ = *src++;
44         }
45     return ret;
46
47 }
48
49 char * Strcpy2(char *dst, const char *src)
50 {
51     assert(dst!= NULL && src != NULL);
52
53     char *ret = dst;
54
55     my_memcpy(dst, src, (int)strlen(src));
56
57     return ret;
58 }
59
60
61
62 int main()
63 {
64     //char *a = "hello";                //含义是先新建一个字符串,内容是abcd 然后str1是一个头指针,指向这个串.
65     char a[6] = {‘a‘,‘b‘,‘c‘,‘d‘,‘e‘};  //但是这个新建串是作为const存在的,并不是一个可以编辑的变量
66     char b[6] = {‘l‘,‘o‘,‘v‘,‘e‘,‘i‘}; //因此,一旦你想更改其中的值,程序就会挂掉.
67     char *c;
68     //a = Strcpy1(a,b);   数组名是指针常量,不能赋值。
69     c = Strcpy1(a, b);
70     puts(c);
71
72 }
时间: 2024-10-14 10:41:34

strcpy的实现的相关文章

strcpy和strcat易忽略点

首先来看一段C程序: 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 5 void GetMem(char*& pstr){//注意必须要用指针的指针或者指针的引用.如果传本身,返回的已经是空悬指针了 6 pstr=(char*)malloc(20); 7 } 8 9 int main(){ 10 char* str; 11 GetMem(str); 12 13 strcpy(

warning C4996: &#39;strcpy&#39;: This function or variable may be unsafe. Consider using strcpy_s instead.

使用VS2005以上版本(VS2005.VS2008.VS2010)编译在其他编译器下正常通过的C语言程序,你可能会遇到类似如下的警告提示: 引用内容warning 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 det

strlen(); strcpy(); strcat(); strcmp() ---笔记

指针小知识点: int a =10; int *p=&a; int *q=p;        //p中保存的是a的地址 int *q=p;       //将p的值赋给q 作用是让q也指向a strlen( ); 求字符串的长度 strcpy( ); 复制字符串 strcat( ); 连接字符串 strcmp( ); 字符串大小的比较 1 typedef unsigned int size_t 2 3 size_t my_strlen (const char *str) // strlen()

字符串拷贝函数strcpy写法_转

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->// CppReference.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" using namespace std; /* * 说明:字符串拷贝版本1 * 参数:dest目标地址,src源地址 * 返回:返回拷贝好的地址:如果出错或者有重叠,无

虚怀若谷 字符串拷贝函数strcpy写法_转

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->// CppReference.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" using namespace std; /* * 说明:字符串拷贝版本1 * 参数:dest目标地址,src源地址 * 返回:返回拷贝好的地址:如果出错或者有重叠,无

strcpy自实现

为了避免strcpy源串覆盖问题(P220),自实现strcpy. #include <stdio.h> #include <string.h> #include <assert.h> #include <malloc.h> void myStrcpy(char *to, char *from) { assert(to != NULL && from != NULL); while(*from != '\0'){ *to ++ = *from

strcpy和memcpy的区别

strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符. 已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);memcpy提供了一般内存的复制.即memcpy对于需要复制的内容没有限制,因此用途更广. char * strcpy(char * dest, const char * src) // 实现src到dest的复制 { if ((src == NULL) || (d

strcat与strcpy

前几天刚有点认识了strlen和sizeof,今天又有点认识了strcpy和strcat. 在vc2010环境下 1 strcpy strcpy(p,q),p要么为数组,要么为空指针,要是为空指针操作后内存中存储的形式和数组一样,空处为\0,非空指针(分配了内存)报错. 2 strcat strcat(p.q),p要么为数组,要么为strcpy后产生的指针,若为指针(申请了内存)非空报错,若空 (申请了内存)不报错但存在部分乱码. 网上对此有各种说法,但为了程序的可维护性和移植性,第一个参数尽量

strcpy, memcpy, memset函数

一. strcpy函数 原型声明:char *strcpy(char* dest, const char *src); 头文件:#include <string.h> 和 #include <stdio.h> 功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串. 返回指向dest的指针. 实现代码: char * strcpy(char * strDest,c

strcpy函数

功能:char *strcpy(char *str1,char *str2),把字符串2复制到字符串1. 源码: char *strcpy(char *str1,char *str2) { assert(str1 != NULL && str2 != NULL); char *p = str1; while( *str1++ == *str2++); return p; } 在练习题中的实现,编译环境vs2008: 1 /*Test*/ 2 #include<stdio.h>