0 background
在大一/大二的时候有次考试问到了这个函数,昨天因为喝了咖啡3点半迟迟无法入睡便看了一下这个函数,结果让人更兴奋了。这里记录一下不会的知识,和函数的要点。
1 strcpy
#include <assert.h>
char* strcpy(char* dest, const char* src){
assert((dest != NULL) && (src != NULL));
//throw "Invalid argument(s)";
char* r = dest;
while((*r++ = *src++) != '\n');
return dest;
}
Q&A Q:
1 函数返回char *;
2 原串用到了 const char*;
3 对原串目的串的异常判断;
Q&A A:
1 返回char* 是可以支持函数的链式表达,增加函数“附加值”;
如: char* newstr = strcmp(new char[10], oldstr);
char* s = void *memset(void *s, int ch, size_t n);
用比较少的语句可以完成串的分配空间,指针赋值操作。
2 形参为常量指针,保证代码可读性和函数质量,意为在函数中此变量不需更改。
3 异常判断为体现严谨之处,另外如果不用库函数可以用 throw 来抛出异常
2 strlen
#include <assert.h>
int strlen(const char* src){
assert(src != NULL);
int len = 0;
while(*src++ != '\0'){
len ++;
}
return len;
}
Q&A :
这里都比较简单了,注意异常判断即可。
3 reference
https://blog.csdn.net/fycy2010/article/details/47709179
这一篇关于很多c基本函数讲解的很好,而且有一些比较难以发现的问题,值得仔细研读。