У вас есть аргументы для вызовов strcpy
неверно! См. Определение в cppreference :
char * strcpy (char * destination, const char * source);
Итак, в вашем первом конструктор, вызов:
strcpy(cntnt,content);
пытается скопировать вновь выделенный буфер в переданный аргумент, который на самом деле является (постоянным) строковым литералом:
int main(int argc, const char * argv[]) {
fancyString fs1 ("First Example");
//...
ЗАМЕЧАНИЯ , основанные на предложениях, высказанных в комментариях:
(1) Обратите внимание, что в вашем вызове calloc
, который выделяет «массив» из char
, размер элементов равен sizeof(char)
not sizeof(char*)
(что подходит для «массива» указателей). Используйте:
content = (char *) calloc(strlen(cntnt)+1, sizeof(char));
и аналогично в конструкторе копирования.
(2) Предполагая, что ваш первый конструктор никогда не предназначен для изменения строки, заданной в качестве аргумента, Вы должны действительно указать это как const
:
fancyString(const char* cntnt){
//...
(Это указало бы на ошибку, если strcpy
аргументы неверны!)
Пожалуйста, не стесняйтесь просить дальнейших разъяснений и / или объяснение.