думаю, в программе ошибка
посмотрите код?
с него можно было и начать
#include <iostream> #include <string.h> using namespace std; class MyString { private: char* buffer; public: MyString(const char* initString) // конструктор { if (initString != nullptr) { buffer = new char[strlen(initString) + 1]; strcpy(buffer, initString,); } else buffer = nullptr; } ~MyString() { cout << "Вызов деструктора" << endl; if (buffer != nullptr) delete[] buffer; } int GetLength() { return strlen(buffer); } const char* GetString() { return buffer; } }; int main() { setlocale(0, ""); MyString sayHello("Hello from String Class"); cout << "Содержимое буфера длиной "; cout << sayHello.GetLength() << " символа." << endl; cout << "Буфер содержит: " << sayHello.GetString() << endl; }
Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
ошибку какую выдает?
нераспознанная директива препроцессора; требуется выражение; синтаксическая ошибка: )
#include <string.h> замени на #include <cstring>
только одна ошибка ушла - нераспознанная директива...
strcpy(buffer, initString,); - здесь запятая лишняя последняя
теперь одна ошибка - Ошибка C4996 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
Это можно и загуглить
ну, ошибку перевести с английского?
а зачем мы здесь, при выделенной памяти, добавляем 1 к размеру сообщения? часть кода: MyString(const char* initString) // конструктор { if (initString != nullptr) { buffer = new char[strlen(initString) + 1]; strcpy(buffer, initString,); } else buffer = nullptr; }
Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
Всё ещё неправильно :( Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
Всё ещё неправильно :( Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
Для терминатора
чтобы переполнения не было, как я понимаю?
Погоди, так это ты спиздил код? Тю
Не знаю, раз спрашиваешь
я не пиздел ничего
Тогда зачем ты написал +1?
я не понимаю, зачем в коде мы пишем +1
А зачем написал?
это программа из книги "с++ за 12 день", там в теме этот код был, я всю работу программы понял, кроме этой 1
Тогда гугли null terminated string
Строки в Си хранятся вместе с нулевым символом в конце, который не считается в длину
понял, там было про это написано, но это ведь в Си, а не в с++; или ошибаюсь я?
char* это строки в стиле Си. std:: string просто некая "обертка" под них
Си — это больше, чем просто язык, это ещё и по факту интерфейс общения разных языков между собой, и дефолтный язык для Unix-like ОС, так что всем приходится с этим жить и пользоваться
В будущем Си будет маленькой частью С++, которую знать будут только олды 🦊
Разве это не глупо? По сути есть такая каста линуксоидов-сишников, которые срут на плюсы
Вы отправляете все ядро линукса в маленькую часть :CC и в легаси...
Уже: ибо в ВУЗах си++, а Си изучают только сумасшедшие "олды"
Ну так-то по факту уже легаси 🥸
Не, в ВУЗах обычно Си через призму С++, кек
Си больше и важнее, чем Си++, и чем дальше, тем больше они будут расходиться. Я не уверен, например, совместимы ли Сишные лямбды с Си++
у меня 13 лет назад уже не было никакого Си, только нормальный С++
Когда я учился в универе, то был глупый и думал, что Си++ — это как Си, только круче. В итоге не выучил ни Си, ни Си++
Запомните дети: puts("Hello, world!") - ненормально.. template <....., QWZX type> constexpr static inline supafast restrict function void fun(type.... T X Q) { std::cout << "Hello, world!\n"; } END_SUPER_COMPLER - норм
Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
Да и на обычном Си нормально пишется, много готовых либ, которые теже плюсы оборачивают в классы и используют внутри
strcpy типа старая функция очень, оно думает, может быть небезопасная она
меня больше забавляет, что предлагают там проприетарные M$ расширения
Обсуждают сегодня