2013-11-26 99 views
0

我想分割我的實際關鍵點,然後提取所有的領域分裂後點。strtok_s在這個範圍內沒有聲明

我的鑰匙看起來像這樣的東西 -

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'用於窗口。你有一個類似的線程在這裏:http://stackoverflow.com/questions/9021502/whats-the-difference-between-strtok-r-and-strtok-s-in-c – lolando

+0

啊...我應該知道這一點之前..然後如何使用普通的'strtok'解決上述問題?我相信,我不能簡單地用'strtok'替換'strtok_s'? – AKIWEB

+0

我認爲Joachim的解決方案適合您的需求(即根據您的平臺使用預處理器指令來使用'strtok_s'或'strtok_r') – lolando

回答

2
#ifndef _MSC_VER 
inline 
char* strtok_s(char* s, const char* delm, char** context) 
{ 
     return strtok_r(s, delim, context); 
} 
#endif 
+0

感謝Michael的建議。如何在我的C++代碼中使用上述代碼?我應該把上面的代碼放在我的C++項目的最後? – AKIWEB

相關問題