簡體   English   中英

解析輸入線c

[英]Parse an input line c

我想從輸入行中提取一些數字,這是一個字符串。 該字符串如下所示:

    command 1 2 3 4 5

到目前為止,我已經做到了,但是不能正常工作:

   if ( strncmp(line,"command",7) == 0 ){
          char *p = strtok(line," ");
          while ( p !=NULL){
                param1 = atoi(p[1]);
                param2 = atoi(p[2]);
                param3 = atoi(p[3]);
                param4 = atoi(p[4]);
                param5 = atoi(p[5]);
                p = strtok(NULL," ");
          }
   }

我哪里錯了?

使用sscanf可能更簡單:

if (strncmp(line, "command", 7) == 0)
{
    sscanf(&line[8], "%d %d %d %d %d", &param1, &param2, &param3, &param4, &param5);
}

你為什么&p [1]? p是while循環中指向當前令牌的指針。 它不會像您期望的那樣為您提供所有元素。

您可以將param聲明為數組:int param [5];

並像這樣重寫循環:

    int i=0;
    while ( p !=NULL){
                    param[i++] = atoi(p);
                    p = strtok(NULL," ");
    }

如果要使用5個變量,例如param1,param2 .... etc,則必須擴展循環並手動編寫,這不是一個好主意。

#include <string.h>
int main(){
        char line[]="command 1 2 3 4 5";
       if ( strncmp(line,"command",7) == 0 ){
              char *p = strtok(line," ");        
              while ( p !=NULL){                
            printf("%s\n",p);
                    p = strtok(NULL," ");
              }
       }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM