KeyValues. Проверка пустой или несуществующей строки.

Young <

Now, finally free
Сообщения
1,263
Реакции
505
Всем привет. Столкнулся с такой проблемой. При получении данных из строки необходимо проверить, пустая ли это строка (и существует вообще ли такая структура). Для этого я написал код.
C-подобный:
                char sGroup[128];
                KvGetString(ph_Keys, "group", sGroup, sizeof(sGroup));
                if (IsNullString(sGroup))
                {
                    PrintToChat(iClient, "Неверные параметры ключа!");
                    return Plugin_Handled;
                }

При работе плагина он вообще пропускает данный шаг и выполняет функции, которые идут за ним.
Вот так выглядит структура:


C-подобный:
"key"
{
    "ключ"
    {
        "group"        ""
    }
}

Как можно проверить, заполнен ли данный параметр, и еще, существует ли такая структура "group"?
 
Решение
По умолчанию можно проверить так:
PHP:
KvGetString(ph_Keys, "group", sGroup, sizeof(sGroup));
if (sGroup[0] !='\0')
{
}

Таким образом можно проверить пустой ли ключ, либо существует ли он вообще.

Nico Yazawa

Бывший MrChester =(
Сообщения
326
Реакции
303
Вообще, лучше проверять так:
C-подобный:
if(sGroup[0])
{
    // Код
}
И у Вас есть перепрыгивание на категорию "ключ"?
 

FurFur

Участник
Сообщения
153
Реакции
85
По умолчанию можно проверить так:
PHP:
KvGetString(ph_Keys, "group", sGroup, sizeof(sGroup));
if (sGroup[0] !='\0')
{
}

Таким образом можно проверить пустой ли ключ, либо существует ли он вообще.
 
Решение

rejchev

менеджер клоунов
Сообщения
1,669
Реакции
1,291
Если ключа нет, то и в переменную запишет дефолтное значение, если же оно пусто, то переменная получит нулевое значение в зависимости от типа данных.
Для строки: strlen(value) == 0 or value[0] == 0

Достаточно почитать: SourceMod Scripting API Reference
 

Young <

Now, finally free
Сообщения
1,263
Реакции
505
Ни так, ни так не срабатывает, давайте пойдем по-другому, как можно реализовать проверку на существование секции, т.е. если существует секция "coins", то он будет выполнять функции для этой секции, если секция "group", то функцию для этой секции.
 

rejchev

менеджер клоунов
Сообщения
1,669
Реакции
1,291
Ни так, ни так не срабатывает, давайте пойдем по-другому, как можно реализовать проверку на существование секции, т.е. если существует секция "coins", то он будет выполнять функции для этой секции, если секция "group", то функцию для этой секции.

Вы хоть в секцию то прыгаете? Код сюда скиньте весь
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,981
FurFur, запись if(sGroup[0] !='\0') равнозначна записи if(sGroup[0]), т.к. индекс символа '\0' равен 0
 
Сверху Снизу