C/C++
Размер динамического массива, передаваемого в функцию в C++.
Имеется функция с параметром char *input. *input - указатель на динамический массив, как я знаю. Я хочу попробовать воспользоваться функцией sizeof(&input) / sizeof(input[0]). Будет ли это правильным?
нет, правильным будет передать размер массива 2-ым аргументом в функцию
Религия в 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");
}
#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");
}
все в твоих руках
Евген Левченко
справедливо
sizeof(&input) или sizeof(input) покажет размер указателя .
sizeof(input[0]) покажет размер первого символа в строке (массиве).
Если, например, был бы массив char input[10], то sizeof(input) показал-бы размер всего массива.
sizeof(input[0]) покажет размер первого символа в строке (массиве).
Если, например, был бы массив char input[10], то sizeof(input) показал-бы размер всего массива.
Евген Левченко
проблема в том, что я работаю в функции с указателем. и возврат 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, то есть размер указателя. это от компилятора зависит.
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, то есть размер указателя. это от компилятора зависит.
попробуй
Евген Левченко
вот я и спрашиваю, будет ли это правильно. компилятор то сожрет, а результат какой будет?
Похожие вопросы
- Почему динамический массив напрямую в функцию передать нельзя, а динамический массив указателей можно?
- Как работать с элементами динамического массива из функции?
- C++ динамический массив
- Как в функции распечатать двумерный динамический массив в Си
- Программирование на C++ с использованием динамического массива
- C++ Одномерный динамический массив
- Устройство статических и динамических массивов в оперативной памяти (...)
- Двумерный динамический массив с неизвестны количеством столбиков или строк
- Объясните мне разное поведение sizeof для статической константы и динамического массива. C.
- Как массив передать в функцию и обратно? (Язык C)