面试案例1:字符串拷贝函数问题。(不调用库函数)
char *strcpy(char *strDest, const char *strSrc)
{
assert((strDest != NULL) && (strSrc != NULL));
char *address = strDest;
while((*strDest ++ = *strSrc ++) != '\0');
return address;
}
面试案例2:字符串链接问题。(不调用库函数)
char* strcat(char* des, const char* src) // const表明为输入参数
{
assert((des!=NULL) && (src!=NULL));
char* address = des;
while(*des != '\0') // 移动到字符串末尾
++des;
while(*des++ = *src++)
;
return address;
}
面试案例3:字符串比较问题。(不调用库函数)
int strcmp(const char *s1,const char *s2)
{
assert((s1!=NULL) && (s2!=NULL));
while(*s1 == *s2)
{
if(*s1 == '\0')
return 0;
++s1;
++s2;
}
return *s1 - *s2;
}
面试案例4:字符串长度问题。(不调用库函数)
int strlen(const char* str)
{
assert(str != NULL);
int len = 0;
while((*str++) != '\0')
++len;
return len;
}
void assert( int expression );
宏 assert 经常用于在函数开始处检验传入参数的合法性,可以将其看作是异常处理的一种高级形式。assert 的作用是先计算表达式expression,然后判断:
如果表达式值为假,那么它先向stderr打印错误信息,然后通过调用 abort 来终止程序运行。
如果表达式值为真,继续运行后面的程序。
注意:assert只在 DEBUG 下生效,在调试结束后,可以通过在#include