2012-03-26 12 views
2

文字列である入力行からいくつかの数値を抽出します。入力行を解析する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," "); 
      } 
    } 

?文字列は次のようになりますか

+0

なぜあなたはp [x]のアドレスを取得しますか? atoi関数が正しく動作するためには、手動で文字列をnullにする必要があります。 – Ulterior

+0

'strtok()'は、一度に1つのトークンを与えることによって動作します。いくつかのトークンについては、関数を何回か呼び出す必要があります。 – pmg

+0

strtokは推奨されていません。代わりにstrsepを使ってみてください - マニュアルページを参照してください。 –

答えて

3

sscanfを使用すると、単純に次のようになります。

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

ええ!それはもっと簡単です...ありがとう! –

3

をなぜあなた& P [1]? pはwhileループ内の現在のトークンへのポインタです。あなたがここで期待しているようなすべての要素を与えるわけではありません。

paramを配列として宣言できます。int param [5];

などのループを書き換える:あなたはなどのparam1、PARAM2 ....のような5つの変数を使用したい場合、あなたは良いアイデアではなく、ループを拡張し、それを手動で記述する必要があり

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

-1
#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," "); 
       } 
     } 
    } 
関連する問題