これが私のコードです:
#include <iostream>
#include <assert.h>
using namespace std;
char * my_strcpy(char *dst,const char *src)
{
assert(dst != NULL);
assert(src != NULL);
char *ret = dst;
while((* dst++ = * src++) != '\0');
return ret;
}
int main()
{
char str[4]="abc";
cout<<str<<endl;
strcpy(str+1,str); //works, "aabc" will be in it, \0 is out of its range
cout<<str<<endl;
my_strcpy(str+1,str); //an error will be occured here as expected
cout<<str<<endl;
return 0;
}
私の質問は、Microsoft の strcpy がオーバーラップ コピーをサポートし、strcpy がオーバーラップ シナリオをサポートしていないと宣言された C++ 標準ライブラリが潜在的なリーク リスクをもたらすのはなぜですか? このデザインの利点はありますか?
ありがとう!