int CopyStringCount(const char* Str)
{
int nCount = 0;
char* pBuffer;
pBuffer = new char[_MAX_PATH];
strcpy(pBuffer,Str);
while(;pBuffer ;pBuffer++)
if(pBuffer == '//') nCount ++;
return nCount;
}
Count the number of ‘/’ in ginven string.
1. Never judge whether the space allocation is successful after using the new operator.
Correction:
char *pBuffer=NULL;
pBuffer=new char[_MAX_PATH];
if (pBuffer = = NULL)
return 0;
2. ‘strcpy’ is a dangerous function which may cause buffer overrun. Suggest using ‘strncpy’ to replace it. And comparation between _MAX_PATH and the length of Str is necessary.
Correction:
int len = strlen(Str);
if (len >= _MAX_PATH)
return 0;
strncpy(pBuffer, Str, len);
3. “while” expression is wrong. What’s more, the control variable shall be “*pBuffer”, not “pBuffer”.
Correction:
while(*pBuffer++)
4. In “if” expression, the variable shall be “*pBuffer”, not “pBuffer”.
Correction:
if (*pBuffer = = NULL)
5. Forgot to deallocate the memory which allocated by new operator. And after deallocate, the pBuffer pointer shall be evaluated with NULL, in order to avoid it becoming a wild pointer.
Correction:
delete []pBuffer;
pBuffer = NULL;
6. If add a ASSERT(Str != NULL) at the entry of the function, will be better.