##引子
如果面试时需要写一段字符串拷贝的代码,应该如何写才能让考官满意呢,也许很多人可以很快写出来。
void strcpy(char* to, char* from) {
while (*from) {
*to ++ = *from++;
}
*to = '\0';
}
或者更为精简的一段:
while((*to ++ = *form ++) != '\0')
continue;
考官或许会说 strncpy 才是安全的,这个暂时不作为本文的讨论范围,另一些考官或许会问如果要在函数内进行错误和异常的处理,应该如何进行,我们又可以看到五花八门的答案(茴字的x种写法)。ps: 这里先抛开语言,同时,具体的拷贝函数以 … 代替。
1、什么都不做
void strcpy(char* to, char* from) {
if ((to == NULL) || (from == NULL))
return;
...
}
2、返回负数
int strcpy(char* to, char* from) {
if ((to == NULL) || (from == NULL))
return -1;
...
}
3、使用断言
void strcpy(char* to, char* from) {
assert(to != NULL);
assert(from != NULL);
...
}
4、使用异常
void strcpy(char* to, char* from) {
if ((to == NULL) || (from == NULL))
throw exception;
...
}
5、记录到log文件
void strcpy(char* to, char* from) {
if ((to == NULL) || (from == NULL))
fwrite(error);
...
}
6、使用 last error 的方式
#include <error.h>
void strcpy(char* to, char* from) {
if ((to == NULL) || (from == NULL))
error = 16;
...
}
7、将错误信息打印出来
void strcpy(char* to, char* from) {
if ((to == NULL) || (from == NULL))
fprintf(stderr, "strcpy takes no NULL pointer")
...
}
当然,可能还会有其他方式,那么这个时候面对五花八门的答案,有没有哪个是标准答案呢,这下傻眼的就是考官自己了。