Ошибка доступа при копировании текстовых строк

Подскажите почему такой код дает access violation
char *w = new char[256];
memset(w,0,256);
strcpy(w,znachenie);
........
delete [] w;
4 ответа

strcpy копирует все, что идет до первого встретившегося числа нуль. Если такового нет, то произойдет выход за границы массива w


А как лучше можно сделать
char *w = new char[strlen(znachenie)+1];
memset(w,0,strlen(znachenie)+1);
strcpy(w,znachenie);


memset не обязательно, strcpy вставляет терминальный нуль. И точно ли известно, что терминальный ноль в строке znachenie есть?А вообще, переходите на контейнеры!
string znachenie;
...
string w=znachenie;


znachenie тип AnsiString, насчет терминального нуля да есть, а w должно быть char