powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как проверить пустой массив или нет.
22 сообщений из 22, страница 1 из 1
Как проверить пустой массив или нет.
    #39096187
roma1975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

Создаю массив. Присваиваю
char buf_lin2[5000]="";
Потом идут операции и массив может быть или не пустой или пустой. Как проверить пустой ли массив?
...
Рейтинг: 0 / 0
Как проверить пустой массив или нет.
    #39096195
Зимаргл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
roma1975,

Массив это только резервированное место. Он всегда что то содержит.
Как пустой склад содержит воздух.

Строки оканчиваются 0 для определения конца данных.
...
Рейтинг: 0 / 0
Как проверить пустой массив или нет.
    #39096200
roma1975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо как проверить его состояние он сейчас buf_lin2[5000]="" или нет?
...
Рейтинг: 0 / 0
Как проверить пустой массив или нет.
    #39096203
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
buf_lin2[0] == 0
...
Рейтинг: 0 / 0
Как проверить пустой массив или нет.
    #39096230
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roma1975,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
int isEmptyBuffer(char* buf, size_t count)
{
    for(int i=0;i<count;++i){
        if(buf[i])
           return 1;
    }
    return 0;
}
...
Рейтинг: 0 / 0
Как проверить пустой массив или нет.
    #39096333
roma1975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если buf_lin2[0] == 0, а buf_lin2[1] или другой не будет 0?
...
Рейтинг: 0 / 0
Как проверить пустой массив или нет.
    #39096379
roma1975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот с isEmptyBuffer получше вариант будет.
...
Рейтинг: 0 / 0
Как проверить пустой массив или нет.
    #39096382
roma1975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. Вариант с isEmptyBuffer вроде подходит, а в варианте buf_lin2[0] == 0 есть сомнения.
...
Рейтинг: 0 / 0
Как проверить пустой массив или нет.
    #39096393
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Строка "" записывается одним байтом 0. Поэтому для проверки что в буфере пустая ASCIIZ строка достаточно проверить первый байт на 0.
...
Рейтинг: 0 / 0
Как проверить пустой массив или нет.
    #39096453
roma1975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да нет в данном случае там в массиве могут быть и строчные и байтовые данные, поэтому и вызывает сомнение проверка только первого символа.
...
Рейтинг: 0 / 0
Как проверить пустой массив или нет.
    #39096454
roma1975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это в дальнейших операциях они туда размещаются.
...
Рейтинг: 0 / 0
Как проверить пустой массив или нет.
    #39096457
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть разница.
1. Весь буфер инициализирован нулями.
и
2. В буфере с позиции 0 пустая ASCIIZ строка.

Определись, что нужно узнать. Ведь '\0'==buf_lin2[0] и isEmptyBuffer это две больших разницы.

К стати

char buf_lin2[5000]="";

не инициализирует весь буфер, точнее не обязан это делать. Т.е. даже изначально isEmptyBuffer может вернуть 0.
...
Рейтинг: 0 / 0
Как проверить пустой массив или нет.
    #39096473
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roma1975Да нет в данном случае там в массиве могут быть и строчные и байтовые данные, поэтому и вызывает сомнение проверка только первого символа.
Для начала определись что у тебя в буфере будет: строки или данные. Если байтовые данные, то, например, 0 это данные? А 0,0?

Для данных обычно дополнительно делают еще одну переменную, где хранят размер данных и ее проверяют. Если 0 - пусто.
...
Рейтинг: 0 / 0
Как проверить пустой массив или нет.
    #39096498
roma1975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да байтовые данные будут в буфере. В первых четырёх символах размер блока. И я поэтому сейчас сделал так
Код: plaintext
1.
2.
memcpy(&kolbite, buf_lin2, 4);
if (kolbite==0)
...
Рейтинг: 0 / 0
Как проверить пустой массив или нет.
    #39097052
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется, что ничего хорошего здесь не происходит
roma1975Создаю массив. Присваиваю
char buf_lin2[5000]="";


Если переписать его как
Код: plaintext
1.
2.
3.
 
char buf_lin2[5000];
buf_lin2="";


то очевидно выделяется память под массив символов, а потом адрес этой памяти теряется и buf_lin2 начинает указывать на область хранения пустой строки.
Почему что-то должно измениться при короткой записи
Код: plaintext
1.
 char buf_lin2[5000]="";


???
...
Рейтинг: 0 / 0
Как проверить пустой массив или нет.
    #39097053
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BagaBagaПочему что-то должно измениться при короткой записи
Потому что присвоение и инициализация это две разные операции, пусть и использующие один и
тот же знак.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как проверить пустой массив или нет.
    #39097077
Зимаргл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BagaBaga,

Очевидно, херню лучше не писать.
...
Рейтинг: 0 / 0
Как проверить пустой массив или нет.
    #39097107
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BagaBagaМне кажется, что ничего хорошего здесь не происходит
roma1975Создаю массив. Присваиваю
char buf_lin2[5000]="";


Если переписать его как
Код: plaintext
1.
2.
3.
 
char buf_lin2[5000];
buf_lin2="";


то очевидно выделяется память под массив символов, а потом адрес этой памяти теряется и buf_lin2 начинает указывать на область хранения пустой строки.
Почему что-то должно измениться при короткой записи
Код: plaintext
1.
 char buf_lin2[5000]="";


???

Тут написана просто фигнища. Этот код вообще не скомпилируется.
...
Рейтинг: 0 / 0
Как проверить пустой массив или нет.
    #39097170
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovBagaBagaПочему что-то должно измениться при короткой записи
Потому что присвоение и инициализация это две разные операции, пусть и использующие один и
тот же знак.

Про инициализацю присваиванием не слышали?

И где вы тут обнаружили инициализацию _массива_? Массив char'ов (который объявлен) и указатель на последовательность символов (тут - null terminated string) - это разные типы.
...
Рейтинг: 0 / 0
Как проверить пустой массив или нет.
    #39097187
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
char buf_lin2[5000]="";



правая часть строковый литерал, имеет тип const char[]. Левая часть имеет тип char[5000]. Если не ошибаюсь, то ожидаемым поведением данной конструкции будет инициализация массива buf_lin2[5000] терминальным нулем. При этом правой частью может быть любая строка из 4999 + 1 терминального символа
...
Рейтинг: 0 / 0
Как проверить пустой массив или нет.
    #39097191
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roma1975Да байтовые данные будут в буфере. В первых четырёх символах размер блока. И я поэтому сейчас сделал так
Код: plaintext
1.
2.
memcpy(&kolbite, buf_lin2, 4);
if (kolbite==0)


Если вы хотите сопровождать размер массива, то лучше в таком случае создать свой тип данных, либо использовать существующие в С++(я таким не пользуюсь, но скорее всего таки типы данных в С++ есть)
...
Рейтинг: 0 / 0
Как проверить пустой массив или нет.
    #39097193
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryиспользовать существующие в С++(я таким не пользуюсь, но скорее всего таки типы данных в С++ есть)std::vector< char >, std::array< char, 5000 >
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как проверить пустой массив или нет.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]