Первый пример не работает, когда вы пытаетесь удалить указатель. Программа зависает, когда я добавляю нулевой терминатор или без него, я получаю:
Debug Assertion Failed Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
из Visual Studio 2008
//Won't work when deleting pointer:
char *at = new char [3];
at = "tw"; // <-- not sure what going on here that strcpy does differently
at[2] = '\0'; // <-- causes program to hang
delete at;
//Works fine when deleting pointer:
char *at = new char [3];
strcpy(at,"t");
at[1] = 'w';
at[2] = '\0';
delete at;
Итак, что происходит, когда я использую двойные кавычки вместо strcpy? Оба из них отлично справятся с строкой, а отладчик не покажет ничего другого.