Ale*_*ing 30 c scanf string-parsing
我正在解析一个字符串(a char*),我正在使用sscanf它将字符串中的数字解析为双精度数,如下所示:
// char* expression;
double value = 0;
sscanf(expression, "%lf", &value);
Run Code Online (Sandbox Code Playgroud)
这很好用,但我想继续通过常规方法解析字符串.我需要知道已经解析了多少个字符,sscanf以便我可以从新的偏移量恢复手动解析.
显然,最简单的办法就是以某种方式计算出的字符数sscanf分析,但如果没有简单的方法来做到这一点,我很开放的替代双解析选项.但是,我目前正在使用sscanf它,因为它快速,简单,易读.无论哪种方式,我只需要一种方法来评估double并继续解析它.
hmj*_*mjd 44
您可以使用格式说明符%n并提供其他int *参数sscanf():
int pos;
sscanf(expression, "%lf%n", &value, &pos);
Run Code Online (Sandbox Code Playgroud)
nC99标准中格式说明符的说明:
没有输入消耗.相应的参数应该是一个指向有符号整数的指针,在该整数中,通过对
fscanf函数的调用,写入从输入流中读取的字符数.执行%n指令不会增加在执行fscanf函数时返回的赋值计数.没有参数被转换,但是消耗了一个参数.如果转换规范包括赋值抑制字符或字段宽度,则行为未定义.
始终检查返回值sscanf()以确保已进行分配,并且后续代码不会错误地处理其值未更改的变量:
/* Number of assignments made is returned,
which in this case must be 1. */
if (1 == sscanf(expression, "%lf%n", &value, &pos))
{
/* Use 'value' and 'pos'. */
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13154 次 |
| 最近记录: |