1

我正在使用带有-std=c89开关的 Linux gcc 对 C 进行编程。我有一个存储字符串的变量,例如:

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

只需检查 return fromsscanf即可了解成功读取的数量:

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。它需要字符串,一个带有数据,另一个带有分隔符。它返回一个指向令牌的指针,因此您只需循环直到返回 NULL。在http://www.elook.org/programming/c/strtok.html有一个例子。

您只需将循环更改为有一个计数器,然后索引到您的数组中。您可能还想根据数组中可以容纳的数量检查项目数,以防止数组溢出并覆盖一些内存。

于 2012-04-04T22:45:00.093 回答