Разбор строки широких символов в C - PullRequest
0 голосов
/ 03 мая 2020

Я хотел сохранить аргументы, которые были переданы моей программе из командной строки, а затем переслать их в функцию, для которой все строки должны иметь формат данных wchar_t. В следующей программе я прокомментировал функцию и использую printf для тестирования программы, но следующая функция не работает. Где проблема:

int main(int argc, TCHAR* argv[])
{
    TCHAR* cp_UserName[MAX_PATH];
    TCHAR* cp_DomainName[MAX_PATH];
    TCHAR* cp_HashNtlm[MAX_PATH];
    TCHAR* cp_ComputerName[MAX_PATH];

    DnPthIconSetup();
    DnPthInitialization(TRUE);

    int counter = argc;

    if (argc > 4)
    {
        for (size_t i = 1; i < argc; i++)
        {
            if (!_tcsnccmp(argv[i], L"user:", 5))
            {
                *cp_UserName = _tcschr(argv[i], L':') + 1;
            }
            if (!_tcsnccmp(argv[i], L"domain:", 7))
            {
                *cp_DomainName = _tcschr(argv[i], L':') + 1;
            }
            if (!_tcsnccmp(argv[i], L"pc:", 3))
            {
                *cp_ComputerName = _tcschr(argv[i], L':') + 1;
            }
            if (!_tcsnccmp(argv[i], L"ntlm:", 5))
            {
                *cp_HashNtlm = _tcschr(argv[i], L':') + 1;
            }
        }

        wprintf("%s\n", *cp_UserName);
        wprintf("%s\n", *cp_DomainName);
        wprintf("%s\n", *cp_ComputerName);
        wprintf("%s\n", *cp_HashNtlm);
        system("PAUSE");
        // ParametricCredentialDispatcher(cp_UserName, cp_DomainName, cp_HashNtlm, cp_ComputerName);
    }
    else if (argc == 1)
    {
        InteractiveMode();
    }
    else
    {
        printf("\nUsage: ./program user:[] domain:[] pc:[] ntlm:[]\n");
        system("PAUSE");
    }


    return 0;
}

Ответы [ 2 ]

1 голос
/ 03 мая 2020

Попробуйте вместо этого что-нибудь еще:

int wmain(int argc, wchar_t* argv[])
{
    wchar_t* cp_UserName = NULL;
    wchar_t* cp_DomainName = NULL;
    wchar_t* cp_HashNtlm = NULL;
    wchar_t* cp_ComputerName = NULL;

    DnPthIconSetup();
    DnPthInitialization(TRUE);

    int counter = argc;

    if (argc > 4)
    {
        for (size_t i = 1; i < argc; i++)
        {
            if (!wcsncmp(argv[i], L"user:", 5))
            {
                cp_UserName = argv[i] + 5;
            }
            else if (!wcsncmp(argv[i], L"domain:", 7))
            {
                cp_DomainName = argv[i] + 7;
            }
            else if (!wcsncmp(argv[i], L"pc:", 3))
            {
                cp_ComputerName = argv[i] + 3;
            }
            else if (!wcsncmp(argv[i], L"ntlm:", 5))
            {
                cp_HashNtlm = argv[i] + 5;
            }
        }

        wprintf(L"%s\n", cp_UserName);
        wprintf(L"%s\n", cp_DomainName);
        wprintf(L"%s\n", cp_ComputerName);
        wprintf(L"%s\n", cp_HashNtlm);
        system("PAUSE");
        // ParametricCredentialDispatcher(cp_UserName, cp_DomainName, cp_HashNtlm, cp_ComputerName);
    }
    else if (argc == 1)
    {
        InteractiveMode();
    }
    else
    {
        wprintf(L"\nUsage: ./program user:[] domain:[] pc:[] ntlm:[]\n");
        system("PAUSE");
    }

    return 0;
}
1 голос
/ 03 мая 2020

Это массив указателей

TCHAR* cp_UserName[MAX_PATH];

Я уверен, что вы имели в виду массив символов, который будет

TCHAR cp_UserName[MAX_PATH];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...