1

スイッチ付きのLinux gccを使用してCをプログラミングしてい-std=c89ます。次のような文字列を格納する変数があります。

10, 1, 2, 3

上記の文字列で 4 つの整数を示しましたが、実数は前もってわかりません。これらの値を整数配列に抽出するにはどうすればよいですか? たとえば、上限を 8 に設定してメモリを割り当てることができます。しかし、整数の実際の数は常に <= 8 です。

現在、私は次のことを行っています。

sscanf(csv_variable, "%i,%i,%i,%i,%i,%i,%i,%i",
&int_variable[0],
&int_variable[1],
&int_variable[2],
&int_variable[3],
&int_variable[4],
&int_variable[5],
&int_variable[6],
&int_variable[7]);

ただし、これは8つの整数を持つ入力文字列に対して機能します。何らかの形でループ内で解析を実行して、たとえば最大 8 つの可能な整数に対応できるようにしたいと考えています (提供される整数が 8 つ未満の場合でも機能するように)。

4

3 に答える 3

5

ループで実行したい場合は、次を使用して文字列をトークン化できますstrtok

char *tok = strtok(csv_variable, ",");
int i = 0;
while(tok != NULL) {
  int_variable[i] = atoi(tok);
  i++;
  tok = strtok(NULL, ",");
}
于 2012-04-04T22:45:29.827 に答える
2

からの戻り値をチェックして、sscanf正常に読み取られた数を確認してください。

int values_read = sscanf(csv_variable, "%i,%i,%i,%i,%i,%i,%i,%i",
    &int_variable[0],
    &int_variable[1],
    &int_variable[2],
    &int_variable[3],
    &int_variable[4],
    &int_variable[5],
    &int_variable[6],
    &int_variable[7]);
于 2012-04-04T22:39:56.280 に答える
1

関数 strtok の使用を検討してください。1 つはデータを含み、もう 1 つは区切り文字を含む文字列になります。トークンへのポインターを返すため、NULL が返されるまでループするだけです。この例はhttp://www.elook.org/programming/c/strtok.htmlにあります。

カウンターを持つようにループを変更してから、配列にインデックスを付けるだけです。配列がオーバーフローして一部のメモリが上書きされるのを防ぐために、配列に保持できる数に対してアイテムの数を確認することもできます。

于 2012-04-04T22:45:00.093 に答える