1.不要使用output memory作为函数内使用的buffer,要使用内部buffer,然后cpy出去
错误实例:
void UnsToStr(unsigned u,char *str)
{
char *pch;
/* u超出范围吗?使用UlongToStr… */
ASSERT(u<= 65536);
/* 将每一位数字自后向前存储
* 字符串足够大以便能存储u的最大可能值
*/
pch = &str[5];
*pch = ‘/0’;
do
*--pch = u%10 + ‘0’;
while((u/=10)>0);
// strcpy(str,pch);
}
正确
void UnsToStr(unsigned u,char *str)
{
char strDigits[6];
char *pch;
/* u超出范围了吗?使用UlongToStr… */
ASSERT(u <= 65536);
pch = &strDigits[6];
*pch = ‘/0’;
do
*--pch = u % 10 + ‘0’;
while((u/=10)>0);
strcpy(str,pch);
}
2.不要编写寄生函数,不要编写依赖于另一个函数内在实现的函数
错误实例
/* FILL 填充某一存储域 */
void Memset(byte *pb,size_t size,byte b)
{
if(size>0)
{
*pb = b;
memcpy(pb,pb+1,size-1);
}
}
这样的程序对于RAM没错,但对于 memoryI/o(机械手)ROM,就不对了