【发布时间】:2017-08-20 12:55:49
【问题描述】:
我喜欢遍历字符串1.3.6.1.2.1.2.2.1.10.1 并将所有数字存储在一个数组中。我的代码适用于 0-9 之间的数字,但不适用于大于 9 的数字,因为我只迭代一步并扫描数字。如何存储所有数字,而不是像我当前的输出:1 3 6 1 2 1 2 2 1 10 0 1(没有换行符)?
int main(int argc, char *argv[])
{
//char * string = "1.3.6.1.2.1.2.2.1.9.1"; /* OK */
char * string = "1.3.6.1.2.1.2.2.1.10.1"; /* NOK */
static int oid_val_arr[256];
char *oid_tmp = string;
int idx = 0;
while (*oid_tmp)
{
int number;
if (sscanf(oid_tmp, "%d", &number) == 1)
{
oid_val_arr[idx] = number;
idx++;
}
oid_tmp++; /* PROBLEM */
}
for(int i = 0; i < 12; i++)
printf("%d\n", oid_val_arr[i]);
}
我应该使用strtok()吗?
【问题讨论】:
-
扫描成功后,您可以添加
oid_tmp += log(oid_val_arr[idx]);。 -
@alk 你能解释一下你的意思吗?我不明白。
-
while(isdigit(*oid_tmp)) { oid_tmp++; } if(*oid_tmp == '.') { oid_tmp++; }这需要#include <ctype.h> -
log10()的文档在这里:port70.net/~nsz/c/c11/n1570.html#7.12.6.8;文档日志对数在这里:en.wikipedia.org/wiki/Logarithm -
忘记
strtok。使用strtol代替scanf;它会给出一个指向第一个不匹配字符的指针。