strcpy的实现
//
// Strcpy.c
// libin
//
// Created by 李宾 on 15/8/20.
// Copyright (c) 2015年 李宾. All rights reserved.
// #include <stdio.h>
#include <assert.h>
#include <string.h>
/***********************************************不考虑覆盖*****************************************/
char * Strcpy1(char *dst, const char *src)//const 在*号左边,指的是指针所指向的内容为常量,不允许修改。
{
assert(dst != NULL && src != NULL); //判断指针是否为空,条件为假,中断程序。 char *ret = dst; while((*dst++ = *src++)!='\0'); return ret; //返回dst是为了支持链式表达式。例如:int l=strlen(strcpy(strA,strB));
} /**********************************************考虑内存重叠******************************************/
char *my_memcpy(char *dst, const char* src, int len)
{
char * ret = dst;
int n = len + ;
if (dst>=src && dst <= src+len)
{
dst = dst + len;
src = src + len;
while (n --)
{
*dst-- = *src--;
}
}
else
while (n--)
{
*dst++ = *src++;
}
return ret; } char * Strcpy2(char *dst, const char *src)
{
assert(dst!= NULL && src != NULL); char *ret = dst; my_memcpy(dst, src, (int)strlen(src)); return ret;
} int main()
{
//char *a = "hello"; //含义是先新建一个字符串,内容是abcd 然后str1是一个头指针,指向这个串.
char a[] = {'a','b','c','d','e'}; //但是这个新建串是作为const存在的,并不是一个可以编辑的变量
char b[] = {'l','o','v','e','i'}; //因此,一旦你想更改其中的值,程序就会挂掉.
char *c;
//a = Strcpy1(a,b); 数组名是指针常量,不能赋值。
c = Strcpy1(a, b);
puts(c); }
strcpy的实现的更多相关文章
- strcpy函数在VS2015无法使用的问题
一:原因:一般认为是vs准备弃用strcpy的,安全性较低,所以微软提供了strcpy_s来代替 然而,strcpy_s并没有strcpy好用,我们要想继续在VS2015中使用strcpy该怎么办 呢 ...
- 你必须知道的指针基础-4.sizeof计算数组长度与strcpy的安全性问题
一.使用sizeof计算数组长度 1.1 sizeof的基本使用 如果在作用域内,变量以数组形式声明,则可以使用sizeof求数组大小,下面一段代码展示了如何使用sizeof: ,,,,,}; int ...
- strcpy 函数的实现
原型声明:extern char *strcpy(char *dest,const char *src); 头文件:string.h 功能:把从src地址开始且含有‘\0’结束符的字符串赋值到以d ...
- Linux C 字符串函数 strlen()、strcat()、strncat()、strcmp()、strncmp()、strcpy()、strncpy() 详解
strlen(返回字符串长度) 表头文件 #include <string.h> 定义函数 size_t strlen(const char *s); 函数说明 strlen()用来计 ...
- strncpy,strcpy
strncpy不会为des自动添加“\0” strcpy遇空结束,自动添加结束符 结论: 1.使用strcpy时一定不能用于无结束符的字符串,因为strcpy依赖\0判断源字符串的结束 2.使用str ...
- strcpy strlen memcpy等的函数实现
#include <assert.h> #include <string.h> #include <stdlib.h> #include <stdio.h&g ...
- 字符串strcpy
strcpy函数的表达方式: //把一个char组成的字符串循环右移n个,如:“abcdefghi",n=2,移动后"hiabcdefgh" #include <i ...
- strlen(); strcpy(); strcat(); strcmp() ---笔记
指针小知识点: int a =10; int *p=&a; int *q=p; //p中保存的是a的地址 int *q=p; //将p的值赋给q 作用是让q也指向a ...
- strcpy 库函数 拷贝函数
strcpy 是在string.h 里面 #include "stdafx.h"#include "string.h"struct Student{int Se ...
- strcpy和memcpy的区别(转载)
strcpy和memcpy都是标准C库函数,它们有下面的特点.strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符. 已知strcpy函 ...
随机推荐
- JavaWeb项目中文乱码问题
1.从浏览器读数据乱码(post 请求方式) 前提是前端页面是UTF-8编码,因为服务器端默认采用ISO解码,所以乱码,在读取前加上: request.setCharacterEncoding(&qu ...
- [UVa OJ] Longest Common Subsequence
This is the classic LCS problem. Since it only requires you to print the maximum length, the code ca ...
- 学习使用turtlebot2——turtlebot2上使用Hokuyo激光雷达(型号UST-10LX)
目标 在turtlebot2上添加Hokuyo激光雷达传感器,使用激光雷达调用gmapping进行建图. 配置情况 电脑使用Ubuntu 14.04版本,ROS为 Indigo,激光雷 ...
- Fluent Ribbon 第八步 其他控件
前七节将Ribbon的功能大致介绍了一番,本节来介绍一些特殊控件的使用 DropDownButton控件 当前控件是显示下拉功能的基本组件,其配合Gallery能实现诸多特殊功能,代码如下所示 < ...
- JS toLowerCase()方法 toUpperCase()方法
toLowerCase()方法: 定义:toLowerCase() 方法用于把字符串转换为小写. 语法:var str = "String"; str .toLowerCase() ...
- hibernate自动建表之engine设置
1.MYSQL的数据库引擎中,只有InnoDB和BDB(Berkley DB )包括了对事务处理和外键的支持.如果数据引擎建为MyISAM则rollback无效. 2.而hibernate自动建表的时 ...
- action接收请求参数
一.采用基本类型接收请求参数(get/post)在Action类中定义与请求参数同名的属性,struts2便能接收自动接收请求参数并赋给同名属性. action的代码: public class Pa ...
- python1变量,表达式和语句
1.变量和类型 变量是指向各种类型值的名字,以后再用到某个值时,直接引用这个名字即可,不用再写具体的值,在python中,变量的使用环境非常宽松,没有明显的变量声明,而且类型不是固定的.如果你不能确定 ...
- C++中的默认成员函数
一般而言,对于一个用户自定义的类类型,以下四个函数在用户没有自定义的情形下,会由编译器自动生成: 1.default constructor 2.copy constructor Someclass: ...
- Selenium WebDriver 工作原理
WebDriver与之前Selenium的js注入实现不同:Selenium通过JS来定位元素处理元素(基本上所有元素都可以定位到)WebDriver通过WebDriver API定位处理元素:通过浏 ...