1.断言函数assert
(笔试时可能会考到)
assert的头文件是<assert.h>
assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。
其实assert的用法有点像if语句,例如
assert(str != NULL && des != NULL);//当满足括号中的条件时才执行下面的程序
只有当括号里的条件为真是才进行下面代码的执行,如果为假(即0),则输出一条错误信息在终止程序执行。
2.自己实现复制函数strcpy
strcpy函数的头文件是<string,h>
char *pstr = "str";
char str[128] = {
'\0'};
strcpy(str,pstr);
printf("%s\n",str);
strcpy函数直接输出前面那个字符串即可,不需要再另外定义一个字符串接收strcpy的返回
接下来自己实现strcpy
函数
方式一:
char *myStrcpy(char* str,char* des)
{
char* dek = str;
//断言函数assert使用类似于myStrcpy中的if用法
assert(str != NULL && des != NULL);//当满足括号中的条件时才执行下面的程序
while(*des != '\0')
{
*str = *des;
str++;
des++;
}
*str = '\0';
return dek;
}
方式二:
char *myStrcpy2(char* str,char* des)
{
char* dak = str;
if(str == NULL || des == NULL)
{
return NULL;
}
while( *des != '\0')
{
*str++ = *des++;//此处的意思是先取内容赋值了再进行地址的偏移
}
return dak;
}
方式三(实现的是strncpy
):
strncpy
意思是复制指定数量的字符
char *myStrncpy(char* str,char* des,int count)
{
//count是要复制的字符串的个数
char* dak = str;
assert(str != NULL && des != NULL);
while(*des != '\0' && count > 0)
{
*str = *des;
str++;
des++;
count--;
}
*str = '\0';
return dak;
}
其实以上的实现方式都是换汤不换药的
总的代码实现:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h