直接来源码:
#incude <stdio.h>
char *strcpy(char *dst, const char *src)
{
if(dst == NULL || src == NULL)
return;
char *dstFirst = dst;
while( (*dst ++ = *src ++) != '\0');
return dstFirst;
}
int getLen(const char *str) //计算字符串长度,相当于strlen
{
int n = 0;
while(*str++ != '\0')
n++;
return n;
}
//测试部分
void main()
{
char testSrc[] = "zijuezizhi";
char testDst[20];
strcpy(testDst, testSrc);
printf("%s\n", testDst);
}
有几点探讨一下:
1,
while( (*dst ++ = *src ++) != '\0');
关于这句话的执行顺序问题,将*src的值赋给左边的*dst,然后判断*dst是否等于'\0',如果不等于,则dst++,src++,即指针指向下一字符。参考http://topic.csdn.net/u/20120217/19/c6341524-4be1-4ddc-b3f3-96802f137f4a.html《C程序设计语言》第二版
K&R 机械工业出版社 2.10
赋值运算符与表达式:赋值表达式的类型是它的左操作数的类型,其值是赋值操作完成后的值。
现在的问题是,当程序跳出后,src究竟指向哪?也就是当*src = '\0'时,还执行src++ dst++吗?这个问题答案参见我后来写的http://blog.csdn.net/yanzi1225627/article/details/7843672
因此和"\0"比较的是赋值结束后的值,这里究竟是*dst还是*src,姑且认为是*dst吧!有知道的大神赐教下....当执行到最后,*src='\0'时,将'\0'赋给左边的,然后才比较结束。也就是strcpy这个函数,不仅赋值,而且把字符串结束副业赋了过去。
2,注意srcpy这个函数,里面的dst是要求预先申请类存的。char
testDst[20]可以写成char testDst[strlen(testSrc) + 1],也可以写成char testDst[sizeof(testSrc)],如果这点有疑惑可以看我的第一篇帖子http://blog.csdn.net/yanzi1225627/article/details/7838877。
也可以写成char
*testDst = malloc(sizeof(testSrc))或者malloc(strlen(testSrc)+1),来申请内存。
但是如果 char *testSrc = "zijuezizhi",则只能借助strlen来确定内存大小。
分享到:
相关推荐
已知strcpy函数的原型是char *strcpy(char *strDest,const char *strSrc);其中strDest是目的字符串,strSrc是源字符串。不调用C的字符串库函数,编写函数strcpy.
C语言程序设计-用函数实现字符串的复制, 不允许用strcpy()函数.c
不使用库函数strcpy(),编程实现将字符串b复制到字符串a中,不使用库函数strcpy(),编程实现将字符串b复制到字符串a中,不使用库函数strcpy(),编程实现将字符串b复制到字符串a中,不使用库函数strcpy(),编程实现将...
本文的写作目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面试题的内涵。文中的大多数面试题来自各大论坛,部分试题解答也参考了网友的意见。 许多面试题看似简单,却需要深厚的基本功才能给出...
C程序_不调用库函数,实现strcpy函数
Linux下用C语言将一个字符串格式(char*)的MAC地址转换为十六进制数组,代码简洁可直接使用
减少库的使用,解决那些需要小代码量,但苦恼于没有简易的字符串处理函数的郁闷 char *itoa_private(int val, char *buf, unsigned radix);//整数转字符串 int my_isdigit(int ch);//判断字符是否为数字 long long ...
如果面试者指出strcpy(string, str1)调用使得从str1内存起复制到string内存起所复制的字节数具有不确定性可以给7分,在此基础上指出库函数strcpy工作方式的给10分; 对试题3,if(strlen(str1) )应改为if(strlen...
1.已知strcpy 函数的原型是: char *strcpy(char *strDest, const char *strSrc); 其中strDest 是目的字符串,strSrc 是源字符串...不调用C++/C 的字符串库函数,请编写函数 strcpy 等,常见的C/C++面试题,很有用!!
头文件:#include 功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。函数实现: ...
C/C++ 标准库函数手册。 包含大部分常用的标准库函数、标准模版库和关键字等描述。
(1)不调用C++/C 的字符串库函数,请编写函数 strcat 答: VC源码: char * __cdecl strcat (char * dst, const char * src) { char * cp = dst; while( *cp ) cp++; /* find end of dst */ while( *cp++ = *src++ ...
本书以流行的面试题讲解为主要内容,介绍了C、C++语言基本概念,包括保留字、字符串、指针和引用、结构体、库函数等各个方面的基础知识,介绍了面向对象编程基本概念,包括如何实现继承、多态和封装等。还介绍了排序...
2. 什么是“引用”?申明和使用“引用”要注意哪些问题? 4. 在什么时候需要使用“常引用”...不调用C++/C 的字符串库函数,请编写函数 strcpy。 15.在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?
C++常用库函数 缓冲区操作函数、字符分类函数、数据转换函数、数学函数、输入和输出函数、进程控制函数、字符串操作函数 C++常用库函数 缓冲区操作函数、字符分类函数、数据转换函数、数学函数、输入和输出函数、...
c语言函数库(字符串函数) 各个函数均有详细的使用说明和例题、代码。
利用c++不调用库函数分别实现数字图像的膨胀与腐蚀。可以掌握图像的膨胀腐蚀理论以及c++编程基础。。。。
(1)不调用C++/C的字符串库函数,请编写函数 strcpy char *strcpy(char* strDest, const char* strSrc) { assert((strDest!=NULL) && (strSrc !=NULL));//2分 char *address = strDest;//2分 while( (*strDest++ =...
C常用库函数-表 数学函数、字符函数、字符串函数、输入输出函数、动态分配函数和随机函数 C常用库函数-表 数学函数、字符函数、字符串函数、输入输出函数、动态分配函数和随机函数 C常用库函数-表 数学函数、字符...
1.2 函数与头文件 1.3 C预处理器 1.4 将一个字符转换为long型 1.5 strcpy函数 1.6 assert用法 1.7 itoa函数和atoi函数 1.8 strcmp函数实现 1.9 strcpy函数实现 1.10 memcpy函数实现 1.11 memcpy和memmove函数的...