Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915

Приведение памяти к std::string

23.08.2023, 10:55. Показов 1696. Ответов 25
Метки с++ (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте,

Просто ради интереса:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int main()
{
 
    std::string string1 = "Hello1234";
 
 
    char* char_p =  new char[sizeof(std::string)];
 
    memcpy(char_p, &string1[0], sizeof(string1));
 
 
    //((std::string)char_p).resize(1000);
 
 
    static_cast<std::string>(char_p).resize(1000);
 
 
    std::cout << ((std::string)char_p).size() << std::endl;
 
}
Я ожидал, что на консоль выведется 1000, а выводится 9.
То есть я выделил память под размер объекта класса string1 и просто туда скопировал объект string1, разве не должен был получится полноценный объект класса std::string, который бы указывал на ту же самую выделенную память под строку "Hello1234", что и string1 ?

И когда я бы привел char_p к классу std::string, то он бы "работал", как обычный объект и должен был бы изменить свой размер на 1000 ?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.08.2023, 10:55
Ответы с готовыми решениями:

ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri
на вод поступают 2 строки типа string. определить количество вхождений строки 2 в строку 1 ошибка error: cannot convert 'std::string {aka...

delete[] и освобождение памяти в std::string
Здравствуйте, Подскажите пожалуйста, delete освобождает не только &quot;линейную&quot; память, но в случае в std::string еще и саму память...

Копирование памяти под std::string
Есть код: const int N = 3; string* pstr = (string*)malloc(sizeof(string) * N); string arrstr; ...

25
23.08.2023, 13:31
Студворк — интернет-сервис помощи студентам

Не по теме:

Цитата Сообщение от Royal_X Посмотреть сообщение
Verevkin, из отпуска вернулся?
Да, позавчера приехал.

0
0 / 0 / 0
Регистрация: 22.08.2023
Сообщений: 3
23.08.2023, 15:30
тут ж интереснее момент есть
и вот он прям классный

тыц
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cstring>
 
void g(std::string s) {
    char* char_p =  new char[sizeof(std::string)];
 
    ::memcpy(char_p, &s, sizeof(s));
 
    reinterpret_cast<std::string*>(char_p)->resize(40);
 
    std::cout << (reinterpret_cast<std::string*>(char_p))->size() << std::endl;
    delete[] char_p;
}
 
int main() {
    std::cout << sizeof(size_t) << std::endl;
    std::string s1 = "abc";
    std::string s2(100, 'a');
    g(s1);
    return 0;
}
0
фрилансер
 Аватар для Алексей1153
6495 / 5726 / 1133
Регистрация: 11.10.2019
Сообщений: 15,287
23.08.2023, 15:52
Panique, и чего такого классного в UB ? По меньшей мере тут утечка памяти
0
0 / 0 / 0
Регистрация: 22.08.2023
Сообщений: 3
23.08.2023, 16:07
Цитата Сообщение от Алексей1153 Посмотреть сообщение
Panique, и чего такого классного в UB ? По меньшей мере тут утечка памяти
))
40 на 39 замени.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,307
24.08.2023, 00:16
Цитата Сообщение от Panique Посмотреть сообщение
тут ж интереснее момент есть
и вот он прям классный
??? И в чем же заключается этот "интересный" и "классный" момент?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
24.08.2023, 11:41
Цитата Сообщение от Optimus11 Посмотреть сообщение
Спасибо, я как то реально пропустил, то, что &string1[0] - это указатель на выделенную строку, а не адрес начала класса в памяти.
Optimus11, вы как-то случайно пропустили темы
-выделение памяти в свободном хранилище;
-объект класса;
-конструкторы класса;
-выделение памяти и инициализации объектов;
И при этом пытаетесь экспериментировать там, где на иной ОС можно поломать что-то серьёзное. Не торопитесь и не ленитесь. Учите по порядку и ваша экспериментаторская энергия (хорошая вещь сама по себе) будет использована в мирных целях и на благо людей доброй воли)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.08.2023, 11:41

std::string Зачем нужен std::string::compare, если есть перегруженный оператор ==?
Зачем нужен std::string::compare, если есть перегруженный оператор ==?

Как удалить символ '—' из std::string, используя std::string::erase?
for(auto it = words.begin(); it!=words.end();) { if( *it == '—' ) { it = words.erase(it); ...

Запрошено преобразование от ‘const std::string*’ к нескалярному типу ‘std::string’
private: std::string firstName; }; std::string ClientData::getFirstName() const{ return firstName; } Дает в итоге...

Выделение памяти для буффера, под std::istream& operator>>(std::istream &, String &)
Добрый день. Как осуществляется выделения памяти под перегруженный оператор ввода данных в пользовательский тип? Ведь мы заранее не можем...

Не существует подходящей функции преобразования из std::string в std::string
#pragma once #include &lt;string&gt; #include &lt;iostream&gt; #include &lt;fstream&gt; #include &quot;zapisi.h&quot; #include &quot;yslygi.h&quot; #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru