Как проверить, пустой ли массив в C
Он всегда выполняет else состояние, даже если results[1] пусто.
Я пробовал с results[1] == NULL но никакого успеха.
Как проверить, пустой он или нет?
2 ответы
Инициализировать results массив, поэтому все элементы NULL :
В размещенном коде элементы унифицированы и будут содержать случайные значения.
Кроме того, не допускайте выхода за пределы results массив:
ответ дан 13 дек ’12, 22:12
Правильно ли предположить = < NULL >установит все индексы от 0 до 9 в NULL? Что, если вы хотите установить индексы от 0 до 3 с некоторыми конкретными значениями, а остальные заполнить NULL? Могу ли я сделать что-то вроде = < 0, 2, 3, 4, NULL >, ожидая, что он заполнит остальную часть последним элементом в списке? — мазунки
@mazunki Правильно предположить, что массив будет инициализирован из 0 — 9 as NULL, и для вашего примера инициализация массива как array[10] = <0,1,2,3,4>остальные элементы из 5 — 9 будет инициализирован как NULL,. Вам действительно не нужно указывать NULL, на 4 индекс. — Спирос Гкогкас
В C нет такого понятия, как «пустой массив» или «пустой элемент». Массив всегда содержит фиксированное заранее определенное количество элементов, и каждый элемент всегда содержит некоторое значение.
Единственный способ ввести понятие «пустой» элемент — реализовать его самостоятельно. Вы должны решить, какое значение элемента будет зарезервированный для использования в качестве «пустого значения». Затем вам нужно будет инициализировать элементы массива этим значением. Позже вы сравните элементы с этим «пустым» значением, чтобы увидеть, являются ли они. ну, пустыми.
В вашем случае рассматриваемый массив состоит из указателей. В этом случае выбор значения нулевого указателя в качестве зарезервированного значения, обозначающего «пустой» элемент, является очевидным хорошим выбором. Объявите свой массив результатов как
vertigra / arrayisnullorempty.md
This solution, unfortunately, suffers from a common problem related to handling IEnumerables. The assumption that you can iterate over enumerable more than once.
A better solution is:
Footer
© 2023 GitHub, Inc.
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Check if array is null or empty?
EDIT: The m_nameList is underlined with red color in VisualStudio, and it says «the name ‘m_nameList’ does not exist in the current context»??
EDIT 2: I added some more code
3 Answers 3
If m_nameList is null, that will still blow up, because it will try to find the element to pass to String.IsNullOrEmpty . You’d want:
That’s also assuming that index is going to be valid if m_nameList is non-null.
Of course, this is checking if the element of an array is null or empty, or if the array reference itself is null. If you just want to check the array itself (as your title suggests) you want:
EDIT: Now we can see your code, there are two problems:
-
As Henk showed in his answer, you’re trying to use a local variable when you need a field
You’re also going to get an ArrayIndexOutOfBoundsException (once you’ve used a field) due to this:
That will perform m_totNumOfSeats + 1 iterations because of your bound. You want:
Note that m_nameList[m_totNumOfSeats] is not valid, because array indexes start at 0 in C#. So for an array of 5 elements, the valid indexes are 0, 1, 2, 3, 4.
Another option for your GetNumReserved method would be to use:
Or using LINQ, it’s a one-liner:
(Are you sure you haven’t got it the wrong way round though? I would have thought reservations would be the ones where the name isn’t null or empty, not the ones where it is null or empty.)
Как проверить пустой ли массив?
Добрый вечер! Не знаю как можно проверить пустой ли массив, или в нём есть данные. Для примера есть такой код:
т.е. если массив пустой, он должен вернуть 0. Но как это сделать я не знаю, помогите плез!
- Вопрос задан более двух лет назад
- 2461 просмотр
Простой 2 комментария
- Вконтакте
Илья, Вы сначала определитесь сами, что именно для вас будет «пустым» массивом.
Стандартные статические и динамические массивы, как написал выше poige не могут быть пустыми. Они всегда имеют размер >0. И да же если вы не инициализируете элементы массива, в них все равно будут какие-то значения (мусор).
Стандартный подход — если длина массива 0, значит массив пустой.
Вы можете, например, в программе считать, что значение 0 — это отсутствие элемента и в коде проверять это. Тогда проверка на «пустоту» массива своидтся просто к проверке всех значений на равенство 0. Если хоть один элемент не 0 — массив не пустой. Значение 0 я взял произвольно, вы можете брать любое другое, в зависимости от типа данных хранящегося в массиве. Или еще хуже — сделать массив структур, одно поле структуры отводите под признак — пустая структура или нет.
В языке С в принципе не бывает «пустых» массивов. Разве что динамически выделенная под массив память может иметь размер 0 или flexible array member в структуре может соответствовать массиву размера 0.
Поэтому не ясно, о чем вы вообще ведете речь.
В любом случае, передавать в такую функцию правильный размер массива — ваша задача.