函数功能:
复制字符串
代码思想:
功能函数内进行循环逐个字符串赋值,主函数内调用。
函数设计:
void my_strcpy(char* str, const char* src) :将src内容复制到str内,src内容固定因此用const,指针是因为要带回多个返回值。
函数内malloc的代码实现过程:
如果将malloc写在my_strcpy函数内,则会发现无法在该函数内free,因为一旦free,就相当于没写,可是不free就会出现内存泄漏,因此在main内调用malloc再free。
void my_strcpy(char* str, const char* src){
str = malloc();//简略写了..
return str; }
int main(){
my_strcpy(str,src);
free(p);
但是发现这样写也有问题,因为用户使用的时候并不清楚是否要释放在哪释放,很难提醒用户在主函数内调用函数之后还要free。因此,malloc最好在main里面实现。正确实现在如下的全部代码内。
完整代码:
#include<stdio.h>
#include <string.h>
#include<stdlib.h>
#include<assert.h>
//字符串复制,将scr内容赋值到str内
void my_strcpy(char* str, const char* src) {
int i;
for (i = 0; i < strlen(src); i++)
{
str[i] = src[i];//*(str+i)也行
}
str[i] = '\0';
//或者这样写:
/*while (*src != '\0')
{
*str = *src;
str++;
src++;//可以综合前三步 *str++ = *src++; *优先级高于+
}*/
}
int main()
{
const char* src = "hello";
int len = strlen(src);
char* str = (char*)malloc(sizeof(char)*(len+1));//len+1是因为字符串后面有个'\0'
assert(str != NULL);
my_strcpy(str, src);
printf("%s\n", str);
free(str);
return 0;
}
输出结果: