字符串—strcpy
典型实现
//C语言标准库函数strcpy的一种典型的工业级的最简实现。 //返回值:目标串的地址。 //对于出现异常的情况ANSI-C99标准并未定义,故由实现者决定返回值,通常为NULL。 //参数:des为目标字符串,source为原字符串。 char* strcpy(char* des,const char* source)
{
char* r=des; assert((des != NULL) && (source != NULL)); while((*des++ = *source++)!='\0') ; //赋值表达式返回左操作数,所以在赋值NULL后,循环停止。
return r;
}
应用实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
⒈ strcpy 的实现代码 char * strcpy ( char * strDest, const char * strSrc) { if ((NULL==strDest) || (NULL==strSrc)) //[1] throw "Invalid argument(s)" ; //[2] char * strDestCopy = strDest; //[3] while ((*strDest++=*strSrc++)!= '\0' ); //[4] return strDestCopy; } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
while ( 1 ) { char temp; *strDestCopy = *strSrc; strDestCopy++; strSrc++; temp = *strSrc; if ( '\0' == temp ) break ; } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
while ( *strSrc != '\0' ) { *strDestCopy = *strSrc; strDestCopy++; strSrc++; } *strDestCopy = *strSrc++; 也即: while ( *strSrc != '\0' ) { *strDestCopy++ = *strSrc++; } *strDestCopy=‘\0’; |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
#include<iostream> #include<stdlib.h> using namespace std; char * strcpy ( char * strDest, const char * strSrc ) { char * strDestCopy = strDest; if ((NULL==strDest)||(NULL==strSrc)) throw "Invalid argument" ; while ( (*strDest++=*strSrc++) != '\0' ); return strDestCopy; } void main( int argc, char * argv[] ) { char a[20], c[] = "i am teacher!" ; try { strcpy (a,c); } catch ( char * strInfo) { cout << strInfo << endl; exit (-1); } cout << a << endl; } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
#include<iostream> using namespace std; char * strcpy ( char *strDes, const char *strSrc); //函数声明 int main() { const char *strSrc= "helloworld" ; char *strDes=NULL; strDes= strcpy (strDes,strSrc); cout<< "strSrc=" <<strSrc<<endl; cout<< "strDes=" <<strDes<<endl; if (strDes!=NULL) { free (strDes); strDes=NULL; } return 0; } char * strcpy ( char *strDes, const char *strSrc) { assert (strSrc!=NULL); //若strSrc为NULL,则抛出异常。 strDes=( char *) malloc ( strlen (strSrc)+1); //多一个空间用来存储字符串结束符'\0' char *p=strDes; while (*strSrc!= '\0' ) { *p++=*strSrc++; } *p= '\0' ; return strDes; } |
1
2
3
4
5
6
7
8
9
|
char * p= "how are you ?" ; char name[20]= "ABCDEFGHIJKLMNOPQRS" ; strcpy (name,p); //name改变为"how are you ? "====>正确! strncpy (name,p, sizeof (name)); //name改变为"how are you ?" =====>正确!后续的字符将置为NULL |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
char * p= "how are you ?" ; char name[10]; strcpy (name,p); //目标串长度小于源串,错误! name[ sizeof (name)-1]= '\0' ; //和上一步组合,弥补结果,但是这种做法并不可取,因为上一步出错处理方式并不确定 strncpy (name,p, sizeof (name)); //源串长度大于指定拷贝的长度sizeof(name),注意在这种情况下不会自动在目标串后面加'\0' name[ sizeof (name)-1]= '\0' ; //和上一步组合,弥补结果 |
字符串—strcpy的更多相关文章
- 字符串strcpy
strcpy函数的表达方式: //把一个char组成的字符串循环右移n个,如:“abcdefghi",n=2,移动后"hiabcdefgh" #include <i ...
- Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
去空格及特殊符号 s.strip().lstrip().rstrip(',') 复制字符串 #strcpy(sStr1,sStr2) sStr1 = 'strcpy' sStr2 = sStr1 sS ...
- Python中字符串操作
#Python字符串操作 '''1.复制字符串''' #strcpy(sStr1,sStr2) sStr1 = 'strcpy' sStr2 = sStr1 sStr1 = 'strcpy2' pri ...
- Python 字符串操作
Python 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) 去空格及特殊符号 s.strip() .lstrip() .rstrip(',') 复制字符 ...
- Python操作文件、文件夹、字符串
Python 字符串操作 去空格及特殊符号 s.strip().lstrip().rstrip(',') 复制字符串 #strcpy(sStr1,sStr2) sStr1 = 'strcpy' sSt ...
- python基础字符串操作
去空格及特殊符号 s.strip().lstrip().rstrip(',') 复制字符串 #strcpy(sStr1,sStr2) sStr1 = 'strcpy' sStr2 = sStr1 sS ...
- OpenJudge计算概论-字符串排序
/*====================================================================== 字符串排序 总时间限制: 1000ms 内存限制: 6 ...
- 黄聪:Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
去空格及特殊符号 s.strip().lstrip().rstrip(',') 复制字符串 #strcpy(sStr1,sStr2) sStr1 = 'strcpy' sStr2 = sStr1 sS ...
- C语言 > 字符串和字符串函数
输入 gets() 函数 : 1.gets() 从标准输入设备读取字符串,以回车结束读取,使用'\0'结尾,回车符'\n'被舍弃没有遗留在缓冲区. 2.可以用来输入带空格的字符串. 3.可以无限读取, ...
随机推荐
- 安卓图表引擎AChartEngine(一) - 简介
AChartEngine 是一个安卓系统上制作图表的框架,目前它支持如下的图表类型: line chart (折线图) area chart (面积图:分区图,对比图) scatter chart ( ...
- Android 编程下 DP、SP 以及屏幕像素密度
有时需为视图属性指定大小尺寸值(通常以像素为单位,但有时也用点.毫米或英寸).最常见的属性有: 文字大小(Text Size),指设备上显示的文字像素高度: 边距(Margin),指定视图组件间的距离 ...
- [DB那些事]数据库加密
说到数据库加密,目前最好且唯一的方案就是SqlCipher对sqlite3整体加密,微信也用的它.开源,且支持很多平台. 单就Android来说,集成不算太麻烦,1个jar包,3个so库,1个zip. ...
- 《DSP using MATLAB》示例Example5.4
- <meta>元素
HTML <meta> 元素 meta标签描述了一些基本的元数据. <meta> 标签提供了元数据.元数据也不显示在页面上,但会被浏览器解析. META元素通常用于指定网页的描 ...
- Spring Data JPA 查询方法支持的关键字
Table 2.3. Supported keywords inside method names Keyword Sample JPQL snippet And findByLastnameAndF ...
- Linux profile File
umask 022alias vim="/pd/vim/7.1/bin/vim"if [ -e /usr/bin/vim ]; then alias vim="/usr/ ...
- Manthan, Codefest 16
暴力 A - Ebony and Ivory import java.util.*; import java.io.*; public class Main { public static void ...
- [R语言]foreach和doParallel包实现多个数据库同时查询
R语言在进行数据库查询时,每执行一条语句,都会阻塞.直到查询语句返回结果之后,才会进行下一条语句. 为了能够实现同时对多个数据库进行查询,以节省顺序执行下来的时间,首先考虑通过多线程来进行数据库查询. ...
- spring aop两种配置方式(1)
第一种:注解配置AOP注解配置AOP(使用 AspectJ 类库实现的),大致分为三步: 1. 使用注解@Aspect来定义一个切面,在切面中定义切入点(@Pointcut),通知类型(@Before ...