库函数strcpy的工作方式,如果编写一个标准strcpy函数的总分值为10,下面给出几个不同得分的答案:
2分
void strcpy( char *strDest, char *strSrc )
{
while( (*strDest++ = * strSrc++) != ‘/0’ );
}
4分
void strcpy( char *strDest, const char *strSrc )
//将源字符串加const,表明其为输入参数,加2分
{
while( (*strDest++ = * strSrc++) != ‘/0’ );
}
7分
void strcpy(char *strDest, const char *strSrc)
{
//对源地址和目的地址加非0断言,加3分
assert( (strDest != NULL) && (strSrc != NULL) );
while( (*strDest++ = * strSrc++) != ‘/0’ );
}
10分
//为了实现链式操作,将目的地址返回,加3分!
char * strcpy( char *strDest, const char *strSrc )
{
assert( (strDest != NULL) && (strSrc != NULL) );
char *address = strDest;
while( (*strDest++ = * strSrc++) != ‘/0’ );
return address;
}
***********************************************************
char *GetMemory( void )
{
char p[] = "hello world"; //错误:如果使用指针是对的
return p;
}
void Test( void )
{
char *str = NULL;
str = GetMemory();
printf( str );
}
**************************************************************
free(str)后应置str为空,导致可能变成一个“野”指针,应加上:
str = NULL;
用到malloc之后记得释放
***********************************************************
swap( int* p1,int* p2 )
{
int *p;
*p = *p1;
*p1 = *p2;
*p2 = *p;
}
在swap函数中,p是一个“野”指针,有可能指向系统区,导致程序运行的崩溃。在VC++中DEBUG运行时提示错误“Access Violation”。该程序应该改为:
swap( int* p1,int* p2 )
{
int p;
p = *p1;
*p1 = *p2;
*p2 = p;
}
本文详细介绍了改进的strcpy函数实现,包括增加输入参数的const特性、进行非0断言确保安全性,以及将目的地址返回以支持链式调用。同时强调了内存管理的重要性,包括正确使用malloc和free函数,防止野指针的出现。
577

被折叠的 条评论
为什么被折叠?



