strtok_s не был объявлен в этой области

0

Я пытаюсь разбить мой фактический ключ на точку, а затем извлечь все поля после разделения его на точку.

Мой ключ был бы похож на что-то такое -

t26.example.1136580077.colox

Ниже приведен код, который у меня есть, и он должен работать нормально. Но почему-то, когда я компилирую этот код, я всегда получаю -

 error: âstrtok_sâ was not declared in this scope

Ниже мой код

if(key) {
    vector<string> res;
    char* p;
    char* totken = strtok_s(key, ".", &p);
    while(totken != NULL)
    {
        res.push_back(totken);
        totken = strtok_s(NULL, ".", &p);
    }

    string field1 = res[0]; // this should be t26
    string field2 = res[1]; // this should be example
    uint64_t field3 = atoi(res[2].c_str()); // this should be 1136580077
    string field4 = res[3]; // this should be colox

    cout<<field1<<" "<<field2<<" "<<field3<<" "<<field4<<endl;
}         

Я запускаю Ubuntu 12.04 и g++ версия -

g++ (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3

Любая идея, что я делаю неправильно? И если есть лучший способ сделать это, тогда я также открыт для этого предложения. У меня создается впечатление, что использование strtok_s будет более эффективным и потокобезопасным.

  • 1
    strtok_s для окон. У вас есть похожая тема здесь: stackoverflow.com/questions/9021502/…
  • 0
    ааа ... я должен был знать это раньше .. Тогда, как решить вышеупомянутую проблему, используя обычный strtok ? Я полагаю, я не могу просто заменить strtok_s на strtok ?
Показать ещё 2 комментария
Теги:
string
split
strtok

1 ответ

3
#ifndef _MSC_VER
inline
char* strtok_s(char* s, const char* delm, char** context)
{
        return strtok_r(s, delim, context);
}
#endif
  • 0
    Спасибо Майклу за предложение. Как использовать приведенный выше код в моем коде C ++? Должен ли я поместить приведенный выше код в самом конце моего проекта C ++?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню