C/C++

Размер динамического массива, передаваемого в функцию в C++.

Имеется функция с параметром char *input. *input - указатель на динамический массив, как я знаю. Я хочу попробовать воспользоваться функцией sizeof(&input) / sizeof(input[0]). Будет ли это правильным?
нет, правильным будет передать размер массива 2-ым аргументом в функцию
АД
Александр Дерезко
195
Лучший ответ
Религия в C++ позволяет упаковать ваши желания в пару...

#include <iostream>
using namespace std;
void input(pair<char*, size_t>& box) {
auto [str, size] = box;
auto last = size - 1;
auto i = 0U;
for (; i < last; ++i) {
auto ch = cin.get();
if (ch == '\n') break;
str[i] = ch;
}
str[i] = 0;
}
void output(pair<char*, size_t>& box) {
auto [str, size] = box;
for (auto i = 0U; str[i] && i < size; ++i) cout.put(str[i]);
}
int main() {
system("chcp 1251 > nul");
pair<char*, size_t> box;
box.second = 80;
box.first = new char[box.second];
cout << "Введите строку: ";
input(box);
cout << "Вы ввели: ";
output(box);
cout.put('\n');
delete[] box.first;
system("pause > nul");
}
СР
Сергей Рыков
97 518
все в твоих руках
Фаиль *****
Фаиль *****
56 350
Евген Левченко справедливо
sizeof(&input) или sizeof(input) покажет размер указателя .
sizeof(input[0]) покажет размер первого символа в строке (массиве).
Если, например, был бы массив char input[10], то sizeof(input) показал-бы размер всего массива.
Aidar Duisenbai
Aidar Duisenbai
37 945
Евген Левченко проблема в том, что я работаю в функции с указателем. и возврат sizeof будет равен размеру указателя.
самый простой типовой способ - требовать размер передаваемого массива параметром той же функции. в стандартных библиотеках такой механизм используется, например, в pcre. то есть
void my_function(char* input,int size);

можно использовать тип std::string вместо char* и пользовать метод std::string::size.

можно так:
int size=std::string(input).size();

еще можно так:
char* buf=input;
while(*buf){buf++}
int size=buf-input;

только эти расчетные способы дадут размер содержимого массива, а не полный размер. например, если в char input[10] у тебя записано "abc", расчетные методы дадут размер 3, а не 10.

для
char input[10];
int size=sizeof(input);
в некоторых случаях даст 10, а в других даст 4, то есть размер указателя. это от компилятора зависит.
попробуй
Евген Левченко вот я и спрашиваю, будет ли это правильно. компилятор то сожрет, а результат какой будет?