我已經在C++中做了基本的memset/memcpy/strcpy實現,它可以正常工作。然而,是否有檢測緩衝區溢出的方式,如果我是做這樣的事情:C++ memset/memcpy/strcpy實現 - 檢查緩衝區溢出
實施例:
int main()
{
char *buf = (char *)calloc(10, sizeof(char));
__strcpy(buf, "Hello World");
// buffer size: 10, copy size: 12 (including '\0') - overflow
}
實現(typedef unsigned int UINT
):
void *__memset(void *_Dst, int _Val, UINT _Size)
{
UINT *buf = (UINT *)_Dst;
while (_Size--)
{
*buf++ = (UINT)_Val;
}
return _Dst;
}
void *__memcpy(void *_Dst, const void *_Src, UINT _Size)
{
UINT *buf = (UINT *)_Dst;
UINT *src = (UINT *)_Src;
while (_Size--)
{
*buf++ = *src++;
}
return _Dst;
}
char *__strcpy(char *_Dst, const char *_Src)
{
while ((*_Dst++ = *_Src++) != '\0');
return _Dst;
}
是不是實現了strncpy呢?也爲什麼這被標記爲C++,它聞起來很像C ... – PlasmaHH
__strcpy是一個保留名稱。不要在名稱中使用雙下劃線。另外,大小應該是'size_t',而不是'unsigned int'。 – MSalters
@ MSalters:MSVC 2013中的'__strcpy'沒有重載(只是我的實現) – Joseph