小程序中的问题
时间:2010-06-09 来源:zyd_cu
上周华为杯笔试有一道查错题,关于拷贝字符串的,虽然从代码质量上分析能检查出很多问题,如没有检查空间是否申请成功,没有检查申请的空间是否足够等,但从语法上是没有问题的,理论上可完成题目要求的任务的,但当时不知怎么搞的就是不愿意把我的想法写上去,考完后甚是后悔,可能是前面的题目错误过于明显吧,对错误的认识形成了定式思维。
对于字符串拷贝的问题,如下面的代码,问题有三:
char *r;
r = (char*)malloc(strlen(s) + strlen(t));
strcpy(r, s);
strcat(r, t);
1. malloc申请内存可能申请失败,高质量的代码应该能处理这一情况;
2. r所指的空间没有显示free,会导致内存泄露问题;
3. 为r分配的空间不足,忽略了字符串结束符;
修正后的代码:
char *r;
r = (char*)malloc(strlen(s) + strlen(t) + 1); //问题3
if(!r) { //问题1
error_message();
exit(1);
}
strcpy(r, s);
strcat(r, t);
free(r); //问题2
相关阅读 更多 +