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

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

49 ответов

9 просмотров

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

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$ расширения

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

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

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
База данных не поможет. Шифрование не поможет. Какие там ещё варианты? Накидывайте.
КТ315
20
А табстоп это сообщение от окна или от элемента управления?
The Bird of Hermes
18
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
Открыл свой двухкилобайтный экзешник в x32dbg, а тут какая-то хрень. Смущает кнопка "выполнить до пользовательского кода", а что ещё может быть в файле помимо него ?
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
11
Мне были интересны дишные хаки и я нашёл любопытный способ на форуме через __traits, что-то вроде int delegate(int) fac = (int n) => n == 0 ? 1 : n * __traits(parent, {})(n - ...
Constantin F.
1
Вопрос тем кто смотрит видео и слушает подкасты - как вы потом ищете нужную вам информацию? Вот статью я прочитал, потом могу искать нужную мне часть банальным поиском. Пропус...
Aleksandr Druzhinin
4
Всем привет, подскажите/посоветуйте пожалуйста. Фаердак компоненты, имею одно место где бизнес хочет видеть при открытии формы список всех клиентов, это порядка 30к. Мои дово...
Sasha Sch
14
Ребят, если кто в курсе - скажите, а в загранке такое же засилье маркетплейсов? или там простые сермяжные интернет-магазины живут попроще?
Андрей [aharito] Харитонов
14
Коллеги, доброе утро. Запустил на удаленном хосте приложение (ручками зашел туда по ssh и запустил, не командой удаленно). Создал потом ssh-туннель, и с моей машины приложение...
Δημήτηρ
9
Карта сайта