线索在标题中,但是基本上我已经继承了一些代码,其中包含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实现。

09-10 23:15