170 похожих чатов

Привет, можете помочь, почему при использовании strcpy программа не работает?

49 ответов

20 просмотров

думаю, в программе ошибка

fd-dsds Автор вопроса
fd dsds
посмотрите код?

с него можно было и начать

fd-dsds Автор вопроса
Anatoly Shirokov
с него можно было и начать

#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; }

fd dsds
#include <iostream> #include <string.h> using name...

Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!

fd-dsds Автор вопроса

нераспознанная директива препроцессора; требуется выражение; синтаксическая ошибка: )

fd-dsds Автор вопроса
Anatoly Shirokov
#include <string.h> замени на #include <cstring>

только одна ошибка ушла - нераспознанная директива...

fd dsds
только одна ошибка ушла - нераспознанная директива...

strcpy(buffer, initString,); - здесь запятая лишняя последняя

fd-dsds Автор вопроса
Anatoly Shirokov
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.

fd dsds
теперь одна ошибка - Ошибка C4996 'strcpy': Thi...

ну, ошибку перевести с английского?

fd-dsds Автор вопроса
fd dsds
#include <iostream> #include <string.h> using name...

а зачем мы здесь, при выделенной памяти, добавляем 1 к размеру сообщения? часть кода: MyString(const char* initString) // конструктор { if (initString != nullptr) { buffer = new char[strlen(initString) + 1]; strcpy(buffer, initString,); } else buffer = nullptr; }

fd dsds
а зачем мы здесь, при выделенной памяти, добавляем...

Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!

fd dsds
а зачем мы здесь, при выделенной памяти, добавляем...

Всё ещё неправильно :( Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!

fd dsds
а зачем мы здесь, при выделенной памяти, добавляем...

Всё ещё неправильно :( Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!

Для терминатора

fd-dsds Автор вопроса
Sergey Kaniskin
Для терминатора

чтобы переполнения не было, как я понимаю?

fd dsds
у кого?

Не знаю, раз спрашиваешь

fd-dsds Автор вопроса
fd dsds
я не пиздел ничего

Тогда зачем ты написал +1?

fd-dsds Автор вопроса
Anatoly Shirokov
Тогда зачем ты написал +1?

я не понимаю, зачем в коде мы пишем +1

fd-dsds Автор вопроса
Anatoly Shirokov
А зачем написал?

это программа из книги "с++ за 12 день", там в теме этот код был, я всю работу программы понял, кроме этой 1

fd dsds
а зачем мы здесь, при выделенной памяти, добавляем...

Строки в Си хранятся вместе с нулевым символом в конце, который не считается в длину

fd-dsds Автор вопроса
Sergey Kaniskin
Строки в Си хранятся вместе с нулевым символом в к...

понял, там было про это написано, но это ведь в Си, а не в с++; или ошибаюсь я?

fd dsds
понял, там было про это написано, но это ведь в Си...

char* это строки в стиле Си. std:: string просто некая "обертка" под них

fd dsds
понял, там было про это написано, но это ведь в Си...

Си — это больше, чем просто язык, это ещё и по факту интерфейс общения разных языков между собой, и дефолтный язык для Unix-like ОС, так что всем приходится с этим жить и пользоваться

Sergey Kaniskin
Си — это больше, чем просто язык, это ещё и по фак...

В будущем Си будет маленькой частью С++, которую знать будут только олды 🦊

'Егор 'Зорин
В будущем Си будет маленькой частью С++, которую з...

Разве это не глупо? По сути есть такая каста линуксоидов-сишников, которые срут на плюсы

'Егор 'Зорин
В будущем Си будет маленькой частью С++, которую з...

Вы отправляете все ядро линукса в маленькую часть :CC и в легаси...

'Егор 'Зорин
В будущем Си будет маленькой частью С++, которую з...

Уже: ибо в ВУЗах си++, а Си изучают только сумасшедшие "олды"

'Егор 'Зорин
В будущем Си будет маленькой частью С++, которую з...

Си больше и важнее, чем Си++, и чем дальше, тем больше они будут расходиться. Я не уверен, например, совместимы ли Сишные лямбды с Си++

у меня 13 лет назад уже не было никакого Си, только нормальный С++

'Егор 'Зорин
Не, в ВУЗах обычно Си через призму С++, кек

Когда я учился в универе, то был глупый и думал, что Си++ — это как Си, только круче. В итоге не выучил ни Си, ни Си++

Alex
у меня 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 - норм

'Егор 'Зорин
Запомните дети: puts("Hello, world!") - ненормальн...

Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!

Alex
у меня 13 лет назад уже не было никакого Си, тольк...

Да и на обычном Си нормально пишется, много готовых либ, которые теже плюсы оборачивают в классы и используют внутри

strcpy типа старая функция очень, оно думает, может быть небезопасная она

David
strcpy типа старая функция очень, оно думает, може...

меня больше забавляет, что предлагают там проприетарные M$ расширения

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
1
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Карта сайта