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 ответов

9 просмотров

логично

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" - соответственно пометить как либо мы можем только через значение

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

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

А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
почому оно не работает?
Vi Chapmann Chapmann
19
Так а кто может спарсить всех участников чата? Идишники
Magic
17
Есть вопрос: допустим есть железка с каким-то интерфейсом(допустим usb), но как по этому интерфейсу железкой управлять неизвестно, прог нету, а управлять очень хочется надо. К...
Mixail Frolov
15
а как ловят такое ghci> res <- getPos2 urlt 0 (alist !! 0) 200 ghci> res SearchAtom (Search "www.google.com" "/search?q=" "Haskell") "haskell.org" (SearchTS [(2024-05-06 07:...
Fedor
14
всем привет почти закончил курс После него можно писать свою операционку? Какие библиотеки надо использовать и куда дальше копать для изучения
Linus
13
Карта сайта