2017-04-26 18 views
0

我現在正在爲一個服務器應用程序上學。目前,我試圖打破一個commandLine條目,它應該被讀入四個獨立的const char *。將單獨的命令行分成不同的const char *

 int state = 0; 
     char *token = std::strtok(commandLine, " "); 
     while(token != NULL) 
      { 
        switch(state) 
        { 
          case 0: c = token; break; 
          case 1: u = token; break;       
          case 2: p = token;break;       
          case 3: a = token; break;    
        } 
        token = std::strtok(NULL, " "); 
        state++; 
      } 

    const char* command = c.c_str(); 
    const char* user = u.c_str(); 
    const char* password = p.c_str(); 
    const char* args = a.c_str(); 

我意識到這不是很好的優化;我一直在嘗試很多不同的解決方案,因爲我一直在嘗試的所有東西都導致了seg故障。感謝您的幫助!

+0

解析命令行是一個解決的問題:http://www.boost.org/doc/libs/1_64_0/doc/html/program_options.html –

+0

對不起,對於這個項目我不允許使用boost。否則這會更容易。 –

+0

歡迎來到Stack Overflow。請花時間瀏覽[The Tour](http://stackoverflow.com/tour),並參閱[幫助中心](http://stackoverflow.com/help/asking)上的內容,瞭解什麼和你怎麼可以在這裏問。發佈[mcve]特別重要。 –

回答

0

這是一個有趣的問題^ _ ^!我試圖在我的電腦運行這段代碼,和我有同樣的問題時,我定義的命令行是這樣的:

char* commandLine = "abc def ghi jkl"; 

原因是strtok函數會改變字符串命令行,源代碼的部分是:

for (; *str ; str++) 
      if (map[*str >> 3] & (1 << (*str & 7))) { 
        *str++ = '\0'; 
        break; 
      } 

所以,當我改變我的定義到:

char commandLine[] = "abc def ghi jkl"; 

問題是gone.wish Userful公司給你,謝謝〜

相關問題