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

А как определить размер буфера? У меня не работает ```char* buffer

= new char[100];
buffer[0] = 't';
buffer[1] = 'e';
buffer[2] = 's';
buffer[3] = 't';
buffer[4] = '\0';
std::cout << sizeof(buffer)/sizeof(char) << std::endl; //??? expecting 100 here but get 8```

79 ответов

28 просмотров

логично

strlen() + 1

strlen + 1 (терм.)

Положить рядом с владеющим указателем

А у вас по задаче запрещено пользоваться std::string или просто интересно попробовать C подобную работу со строками?

sizeof тут определяет размер указателя

Nastya-Medveda Автор вопроса
🐙 Antony Polukhin
А у вас по задаче запрещено пользоваться std::stri...

Я пытаюсь разобраться с указателями и массивами

strlen

Nastya-Medveda Автор вопроса
std::slavik
sizeof тут определяет размер указателя

а как сделать чтоб он определял размер массива? Потому что оно ведь зарезервировало память для 100 элементов и я пытаюсь понять как получить програмно, что размер массива 100 элементов (а не 5 символов, которые я туда записала).

sizeof(buff) / sizeof(int);

Nastya-Medveda Автор вопроса
MAC
sizeof(buff) / sizeof(int);

у меня именно так, но оно не работает: ```char* buffer = new char[100]; buffer[0] = 't'; buffer[1] = 'e'; buffer[2] = 's'; buffer[3] = 't'; buffer[4] = '\0'; std::cout << sizeof(buffer)/sizeof(char) << std::endl;```

Туночка️ ᅠᅠ️
та бля

I. Воздержаться от ненормативной лексики II. Прекратить дробить сообщения на мелкие

Nastya Medveda
у меня именно так, но оно не работает: ```char* bu...

В Дин массиве нельзя определить размер

MAC
В Дин массиве нельзя определить размер

ок а зачем ті написал то же самое что и в вопросе? не дрчитал?

Nastya-Medveda Автор вопроса
std::slavik
работает

да, оно определяет размер указателя (на моей системе оно 8 байт) и делит на размер чар (1 байт).

Nastya Medveda
у меня именно так, но оно не работает: ```char* bu...

#include <array> #include <iostream> int main(){ std::array<char, 100> buffer; buffer[0] = 't'; buffer[1] = 'e'; buffer[2] = 's'; buffer[3] = 't'; buffer[4] = '\0'; std::cout << buffer.size() << std::endl; return 0; }

Nastya Medveda
да, оно определяет размер указателя (на моей систе...

В общем либо запоминать размер struct {size_t size; char* buffer;} либо выделять буфер на стеке char buffer[100];

std::slavik
#include <array> #include <iostream> int main(){ ...

тут при создании массива в него сохраняется его размер

std::slavik
тут при создании массива в него сохраняется его ра...

Зачем сохранять размер Дин массива ? Тогда и переменные нужно для контроля

MAC
Зачем сохранять размер Дин массива ? Тогда и перем...

а зачем во многих функциях C в параметрах буфер и его размер?

std::slavik
#include <array> #include <iostream> int main(){ ...

кста а зачем в стл такой класс нужен? какую задачу он решает? обработку исключений при не правильном индексе? и все? єто ж воще бесполезній клас

Nastya-Medveda Автор вопроса
Mikhail Kalugin
а зачем во многих функциях C в параметрах буфер и ...

Потому что тогда еще не изобрели классы, чтоб передавать экземпляр класса, а не вот это вот всё.

Туночка️ ᅠᅠ️
но он не динамический

#include <vector> #include <iostream> int main(){ std::vector<char> buffer(100); buffer[0] = 't'; buffer[1] = 'e'; buffer[2] = 's'; buffer[3] = 't'; buffer[4] = '\0'; std::cout << buffer.size() << std::endl; return 0; }

Туночка️ ᅠᅠ️
кста а зачем в стл такой класс нужен? какую задачу...

Удобная замена массивов в стиле C, с размером и итераторами

Nastya-Medveda Автор вопроса
std::slavik
#include <vector> #include <iostream> int main(){ ...

Спасибо, это все работает, но я с указателями разбираюсь 🙂

Nastya Medveda
Потому что тогда еще не изобрели классы, чтоб пере...

Верно :) и потому, что другого способа определить размер буфера нет.

Mikhail Kalugin
а зачем во многих функциях C в параметрах буфер и ...

Если Дин массив то значит мы не знаем его размера значит переменная

Mikhail Kalugin
а зачем во многих функциях C в параметрах буфер и ...

Если он расширится как узнать о дополнительно выделенной памяти ?

std::slavik
указатели указывают на объекты

Указатели указывают на память, а что там - определяется типом указателя.

std::slavik
на какую память указывает nullptr

У nullptr свой тип, так что он как раз и указывает на невалидную память?

std::slavik
на какую память указывает nullptr

А это разве указатель? Оно скорее литерал, вроде?

Max Kolesnikov
У nullptr свой тип, так что он как раз и указывает...

Почему невалидную? Это вообще валидное значение указателя

Nastya-Medveda Автор вопроса
std::slavik
на какую память указывает nullptr

А это не обертка над NULL разве?

Vlad
константа

Ну, в общем да. Замена NULL с осмысленным типом.

Liber Azerate
Почему невалидную? Это вообще валидное значение ук...

Но физически ведь нет области памяти с адресом 0?

Nastya Medveda
но NULL это не 0 же.

По разному, это дефайн

Mikhail Kalugin
А это разве указатель? Оно скорее литерал, вроде?

In general, pointer is a type of a variable that stores a link to another object. https://en.cppreference.com/book/pointers

Max Kolesnikov
У nullptr свой тип, так что он как раз и указывает...

у него есть свой тип, но здесь идет речь о том, что получается после приведения nullptr к указателю на нужный тип

Nastya-Medveda Автор вопроса
Туночка️ ᅠᅠ️
ноль же

В некоторых языках это называется None и мне кажется это более точное название

Туночка️ ᅠᅠ️
(void*)0

Это дефайн который каждый определяет как хочет

Nastya Medveda
В некоторых языках это называется None и мне кажет...

None єто кста обїект класса NoneType так что сравнивать єто такое себе занятие

Nastya-Medveda Автор вопроса
Туночка️ ᅠᅠ️
None єто кста обїект класса NoneType так что сравн...

Похоже на печатную машинку с турецким акцентом Остапа Бендера, в которой буква Е не работала. 🙂

std::slavik
есть

Так на какую память тогда указывает нулевой указатель?

Max Kolesnikov
Так на какую память тогда указывает нулевой указат...

с точки зрения языка - на ту в которой не может быть валидных объектов

Max Kolesnikov
Так на какую память тогда указывает нулевой указат...

Она правда есть, просто пользовательскому процессу туда не попасть...

Nastya Medveda
но NULL это не 0 же.

В плюсах 0, может быть не интом, а скажем лонгом

Artöm Bakri Al-Sarmini
nullptr не указатель

ну в данном случае деталь не существенная

Туночка️ ᅠᅠ️
(void*)0

В си это возможно, в плюсах нет

Nastya Medveda
В некоторых языках это называется None и мне кажет...

в питоне? питон - динамическую типизацию имеет - это значит что мы можем в рантайме взять и поменять тип ссылки любой на None - и проверять тип просто - не None ли он. Плюсы и си - статичискую типизацию имеют, то есть если на этапе компиляции определено что указатель имеет тип такой - мы не можем сказать в рантайме - "а теперь это становится типом None" - соответственно пометить как либо мы можем только через значение

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта