线索在标题中,但是基本上我已经继承了一些代码,其中包含800多个strcpy实例。我想编写一个新函数,然后用strcpy_mine替换strcpy。
因此,我正在尝试计算出strcpy_mine将具有哪些参数列表。
我试过:
void strcpy_mine( char* pTarget, const char* const pCopyMe )
{
const unsigned int lenAlwaysFour = sizeof(pCopyMe ); //:(
strncpy( pTarget, pCopyMe, lenAlwaysFour );
//add extra terminator in case of overrun
pTarget[lenAlwaysFour] = 0;
}
但是sizeof总是4 pCopyMe是一个指针
我不想做的就是更换
strcpy (buf, pCopyMe);
和
strncpy (buf, pCopyMe, sizeof(pCopyMe)); buf[sizeof(pCopyMe)] = 0;
有任何想法吗? (strcpy_l不可用)
干杯
最佳答案
根据调用站点的外观,通常可以通过一个简单的模板来处理大多数情况:
#include <string.h>
template <int bufferSize>
void strcpy_mine( char (&pTarget)[bufferSize], const char* const pCopyMe )
{
strncpy( pTarget, pCopyMe, bufferSize-1 );
//add extra terminator in case of overrun
pTarget[bufferSize-1] = 0;
}
int main()
{
char buf[128];
strcpy_mine(buf,"Testing");
return 0;
}
如果您使用的是Microsoft Visual Studio 2005或更高版本,请参见Secure Template Overloads以获取Microsoft实现。