strcpy 实现

strcpy 实现  实现一个C语言的标准库函数:字符串拷贝char*strcpy(char*dest,constchar*src);

简单,但超级常考!!!!!!!!

  实现一个C语言的标准库函数:字符串拷贝 char* strcpy(char* dest, const char* src);
  strcpy 把含有 ‘\0’ 结束符的字符串复制到另一个地址空间,返回值的类型为char*。

  注意:src 和 dest 所指内存区域不可以重叠且 dest 必须有足够的空间来容纳 src 的字符串。
  实现如下:

char* strcpy(char* des, const char* source) { 
   
	assert((des != nullptr) && (source != nullptr));
	char* r = des;
	while((*r++ = *source++) != '\0');
	return des;
}

  对于出现异常的情况 ANSI-C99 标准并未定义,故由实现者决定返回值,通常为NULL。实际调用如下:

#include <iostream>
#include <cassert>
using namespace std;

char* string_copy(char* des, const char* source) { 
   
	assert((des != nullptr) && (source != nullptr));
	//cout << sizeof(des) << " " << sizeof(source) << endl; // 4 4 (32位下指针大小)
	char* r = des;
	while ((*r++ = *source++) != '\0');
	return des;
}

int main() { 
   
	char a[10] = "abcde", b[6];	// b 大小要 >= 6, 不然会崩
	//cout << sizeof(b) <<" "<< sizeof(a) << endl; // 6 10
	string_copy(b, a);
	cout << b << endl;	// abcde
}

要注意的点

1、为什么要返回 char*

  返回 strDest 的原始值使函数能够支持链式表达式,也就是可以 int iLength=strlen(strcpy(strA,strB)); 或者 char * strA=strcpy(new char[10],strB);

2、怎么保证传入的 char* 内存是够的?

  因为传入的是字符数组,数组名自动转换为指针类型,strlen 的话,也只能输出一个很奇怪的数,因为 strlen 遇到 ‘\0’ 才停;sizeof 也因为转换为指针了,会输出 4。所以没有想到什么好的办法判断,望赐教。
  上边的例子,因为字符串默认最后会添加 ‘\0’,所以 b数组至少要 6 的大小,否则会崩。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/35226.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注