Форум программистов, компьютерный форум CyberForum.ru

Неверный размер массива. в чем ошибка? - C++

Восстановить пароль Регистрация
 
Krist_ALL
 Аватар для Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
11.03.2010, 15:40     Неверный размер массива. в чем ошибка? #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int le( int array[]) {
      int i=0;
 while(array[i++]);
 return (i-1);
}
 
 
int main() {
 
 
 
    int a [10] = {1,2,3,4,5,6,7,8,9,10};
cout <<le(a)<<endl;
 
getch();
return 0;
}

выводит 25...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2010, 15:40     Неверный размер массива. в чем ошибка?
Посмотрите здесь:

первод массива char в массив int ( в чем ошибка?????) C++
C++ Вычислить количество элементов массива, не меньших элемента с заданным номером (в чем ошибка?)
C++ Необходимо из элементов массива удалить цифры 0, 3, 6, 9 и записать получившийся массив. Подскажите в чем ошибка?
Ввести размер массива с клавиатуры и передать этот размер в конструктор C++
в чем ошибка? задача на "сортировку массива" C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
11.03.2010, 15:49     Неверный размер массива. в чем ошибка? #2
Krist_ALL, это строка нулём заканчивается. С обычным массивом в функцию надо и его размер передавать.
Krist_ALL
 Аватар для Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
11.03.2010, 16:22  [ТС]     Неверный размер массива. в чем ошибка? #3
int числа
какой ноль?
и всерапвно 25 непойму откудо взелось
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
11.03.2010, 17:48     Неверный размер массива. в чем ошибка? #4
Цитата Сообщение от Krist_ALL Посмотреть сообщение
int числа
какой ноль?
Как по-вашему, когда этот
Цитата Сообщение от Krist_ALL Посмотреть сообщение
while(array[i++]);
цикл завершиться должен, и в array[i] что будет после выхода из него?
Krist_ALL
 Аватар для Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
11.03.2010, 20:35  [ТС]     Неверный размер массива. в чем ошибка? #5
ничего не будет. array не изменяется.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
11.03.2010, 20:47     Неверный размер массива. в чем ошибка? #6
Krist_ALL, как уже сказал easybudda, нулем заканчиваются строки. Строка "abcd" на самом деле есть строка "abcd\0". Поэтому имея строку можно легко вычислить ее размер.

С массивами дела обстоят иначе. Невозможно вычислить размер массива, нужно этот размер "таскать" вместе с массивом.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
12.03.2010, 00:48     Неверный размер массива. в чем ошибка? #7
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Невозможно вычислить размер массива
Неверное утверждение.
Для статических массивов
C++
1
int size = sizeof(mas)/sizeof(mas[0]);
Для динамических
C++
1
int size = _msize(mas)/sizeof(mas[0]);
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
12.03.2010, 01:22     Неверный размер массива. в чем ошибка? #8
Цитата Сообщение от M128K145 Посмотреть сообщение
C++
1
int size = _msize(mas)/sizeof(mas[0]);
Одна беда: это самое _msize() - очередное мелкомягкое недоразумение, а не стандартная функция языка С/С++... Хотя, как можно динамически выделить память не зная, сколько её нужно, я, честно говоря, не представляю... Есть, конечно, тонкости, вроде strdup(), которая, что не удивительно, резервирует на байт больше, чем strlen() возвращает... А вообще, единственный случай, который могу себе представить, когда нужно как-то хитро размер массива узнавать, это когда он объявлен как-то так:
C
1
int arr[] = { 1, 2, 3, 4, 5, 6 };
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
12.03.2010, 13:39     Неверный размер массива. в чем ошибка? #9
Цитата Сообщение от M128K145 Посмотреть сообщение
Неверное утверждение.
Имеется ввиду, что невозможно вычислить размер массива, переданного некой функции, так как массив передается как указатель на его первый элемент.
Krist_ALL
 Аватар для Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
12.03.2010, 18:27  [ТС]     Неверный размер массива. в чем ошибка? #10
Имеется ввиду, что невозможно вычислить размер массива, переданного некой функции, так как массив передается как указатель на его первый элемент.
1- я этот пример взял из книжки
2 - Вот ситуация
----------------------------------------
я читаю строки из файла и загоняю их в массив
хочу вывести первую букву каждой строки.
for(i=0;i<[РАЗМЕР_МАССИВА];i++)
вот как узнать? я раньше кодил на пхп и отстутсвие функции определения размера массива меня тервожит..
Имеется ввиду, что невозможно вычислить размер массива, переданного некой функции, так как массив передается как указатель на его первый элемент.
[/QUOTE]
1- я этот пример взял из книжки
2 - как же тогда работает функция strlen?en?
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
12.03.2010, 20:11     Неверный размер массива. в чем ошибка? #11
Цитата Сообщение от Krist_ALL Посмотреть сообщение
я этот пример взял из книжки
Скорее всего это плохая книга.
Цитата Сообщение от Krist_ALL Посмотреть сообщение
как же тогда работает функция strlen
Функция strlen принимает строку. И как уже говорилось выше строки заканчиваются нулевым символом.
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
12.03.2010, 20:15     Неверный размер массива. в чем ошибка? #12
ХТО АВТОР, может в нете есть, скачаю посмотрю, как люди пишут книги.
Krist_ALL
 Аватар для Krist_ALL
9 / 9 / 0
Регистрация: 01.02.2010
Сообщений: 317
15.03.2010, 15:54  [ТС]     Неверный размер массива. в чем ошибка? #13
почему
int array[10] = {0,1,2,3,4,5,6,7,8,9};
cout <<sizeof(array)/sizeof(int)<<endl;

выводит верный результат?

а когда передаю массив по указателю то нифига.

в маин функция сайзоф знает размер массива а в отделбной функции из параметра определить не может...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2010, 18:32     Неверный размер массива. в чем ошибка?
Еще ссылки по теме:

C++ Ошибка "неверный тип для индекса массива" при работе с двумерным массивом
C++ Сортировка одномерного массива. В чем ошибка?
C++ О чем говорит эта ошибка? Выход за пределы массива

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

Или воспользуйтесь поиском по форуму:
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.03.2010, 18:32     Неверный размер массива. в чем ошибка? #14
Krist_ALL, потому что массив передается как указатель на первый элемент массива и когда ты с помощью sizeof пытаешься получить его размер, sizeof возвращает размер этого указателя.
Yandex
Объявления
15.03.2010, 18:32     Неверный размер массива. в чем ошибка?
Ответ Создать тему
Опции темы

Текущее время: 00:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru