Проблема с ExplodeString [Решено]

Planes

Потерявшиеся точка с запятой
Сообщения
356
Реакции
97
Лютый час пытаюсь допереть что я делаю не так. Теперь к теме :
ExplodeString не выводит соответствующее значение которое должна выводить:
Имеется код
PHP:
int iClient = GetClientOfUserId(userID);
    if(hResults.FetchRow())
    {
        char activ[128], nuM;
        hResults.FetchString(0, activ, sizeof(activ));
        char splitactiv[4][1];

if ((nuM = ExplodeString(activ, ";", splitactiv, 4, 1)) > 1)
{
       PrintToChat(iClient, "Строка разбита на %d новых:", nuM);
       for (int i = 0; i < nuM; i++)
       {
           PrintToChat(iClient, "%s или %i", splitactiv[i], splitactiv[i]); // Выводит: пробел или 0
           PrintToChat(iClient, activ); // Выводится 1;0;0;0
       }
}

Но он такое чувство что вообще не разделяет. :D
Что я делаю не так, подскажите как исправить мое рукожопство
 

_wS_

Участник
Сообщения
383
Реакции
760
Размер пробуй увеличить с 1 до хотя бы 4 или 8.
Если уверен что запись такая '1;0;0;0', то 4 должно хватить.
В string.inc смотри на 'stock ExplodeString' и станет понятно, что ему не нравится.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
тебе нужно сделать char splitactiv[4][2]; т.к. в символьном массиве последняя ячейка может быть равна только 0, а она у тебя одновременно и первая, и последняя
 

DenisPukin

Капитан Костыль
Сообщения
185
Реакции
34
Помогите пожалуйста!
Не пойму почему-то всё время отправляет return true не зависимо от карты.
C-подобный:
public bool ValidateMap()
{
    char szMap[256];
    if(KvJumpToKey(g_hKeyValues, "Maps"))
    {
        KvGetString(g_hKeyValues, "namemap", szMap, sizeof(szMap));
    }
    KvRewind(g_hKeyValues);
    
    int iNumbLines = StrContains(szMap, ";", true);
    char szNum, szCurrentMap[256];
    char[][] szBuf = new char[iNumbLines] [256];
    
    GetCurrentMap(szCurrentMap, sizeof(szCurrentMap));
    if((szNum = ExplodeString(szMap, ";", szBuf, iNumbLines, sizeof(szBuf[][]))) > 1)
    {
        for (int i = 0; i < szNum; i++)
        {
            if(StrEqual(szCurrentMap, szBuf[i]))
            {
                return true;
            }
        }
    }
    
    return false;
}
 

White Wolf

🍉
Сообщения
2,382
Реакции
2,187
  • Команда форума
  • #5
Помогите пожалуйста!
Не пойму почему-то всё время отправляет return true не зависимо от карты.
C-подобный:
public bool ValidateMap()
{
    char szMap[256];
    if(KvJumpToKey(g_hKeyValues, "Maps"))
    {
        KvGetString(g_hKeyValues, "namemap", szMap, sizeof(szMap));
    }
    KvRewind(g_hKeyValues);
 
    int iNumbLines = StrContains(szMap, ";", true);
    char szNum, szCurrentMap[256];
    char[][] szBuf = new char[iNumbLines] [256];
 
    GetCurrentMap(szCurrentMap, sizeof(szCurrentMap));
    if((szNum = ExplodeString(szMap, ";", szBuf, iNumbLines, sizeof(szBuf[][]))) > 1)
    {
        for (int i = 0; i < szNum; i++)
        {
            if(StrEqual(szCurrentMap, szBuf[i]))
            {
                return true;
            }
        }
    }
 
    return false;
}
тогда прологируй szCurrentMap, szBuf[i]
 

DenisPukin

Капитан Костыль
Сообщения
185
Реакции
34
тогда прологируй szCurrentMap, szBuf[i]
Я пробовал в чат выводить. Все работает.
C-подобный:
char szMap[256];
    if(KvJumpToKey(g_hKeyValues, "Maps"))
    {
        KvGetString(g_hKeyValues, "namemap", szMap, sizeof(szMap));
    }
    KvRewind(g_hKeyValues);
    
    int iNumbLines = StrContains(szMap, ";", true);
    char szNum, szCurrentMap[256];
    char[][] szBuf = new char[iNumbLines] [256];
    GetCurrentMap(szCurrentMap, 256);
    if((szNum = ExplodeString(szMap, ";", szBuf, iNumbLines, 256)) > 1)
    {
        PrintToChatAll("Строка разбита на: %d", szNum);
        PrintToChatAll("Текущая карта: %s", szCurrentMap);
        for (int i = 0; i < szNum; i++)
        {
            PrintToChatAll("Карты в кфг: %s", szBuf[i]);
        }
    }
Сообщения автоматически склеены:

В смысле все работает в чате, а проблема с return так и осталась.
 
Последнее редактирование:

Dragokas

Добрая душа
Сообщения
229
Реакции
213
В коде куча ошибок. Не удивительно.

Если правильно понял структуру конфига, то быстрее и проще будет такой алгоритм:
C-подобный:
    char szCur[64];
    GetCurrentMap(szCur, sizeof(szCur));
    
    Format(szMap, sizeof(szMap), ";%s;", szMap);
    Format(szCur, sizeof(szCur), ";%s;", szCur);
    
    return -1 != StrContains(szMap, szCur, false);
 
Сверху Снизу