![](/img/trans.png)
[英]Is it possible to use a strcpy inside a scanf or a sscanf? (in C language)
[英]C language: scanf and sscanf expressions
我在 scanf 和 sscanf 参数中遇到过类似这样的表达式:
sscanf(buffer, "%d,%100[^,]%*c%f", destination_pointer)
或者
scanf("\n%99s", destination);
解释这些的正确方法是什么? 我知道“%s %c %d”之类的东西是什么,而且 %100 或通常的“%number”是要读取的输入的大小。 但是剩下的呢? 我能找到的只是基本的例子,没有接近这个复杂的东西。 有参考指南吗?
解释这些的正确方法是什么?
sscanf(buffer, "%d,%100[^,]%*c%f", destination_pointer)
是无效调用。 有 3 个需要参数的转换说明符 - %d
、 %[]
、 %f
。 这意味着在格式化字符串后正好需要 3 个参数,但只提供了一个destinantion_pointer
。
%d
- 忽略任何空白字符,读取以 10 为基数的int
,
- 读一个逗号%100[^,]
- 读取最多 100 个不是逗号的字符。 目标缓冲区中最多存储 101 个字节(100 个字符 + 空字节)。
%[set]
- 读取集合中的字符%[^set]
- 读取不在集合中的字符%*c
- 忽略一个字符(逗号,因为%100[^,]
一直读到逗号,或者字符串结束,这将使scanf
返回此处)。 注意 - 使用*
忽略转换结果会使scanf
在读取成功的情况下不会增加返回值。%f
- 忽略任何空白字符,读取浮点数(任何格式 - 十进制、科学或十六进制)scanf("\\n%99s", 目的地);
\\n
- 读取(并忽略)任意数量的空白字符(空白,表示任何内容isspace()
返回非零值,因此空格、换页、换行、回车、制表符或垂直制表符)%99s
- 忽略任何前导空白字符(它前面的\\n
是无用的...),然后读取最多 99 个不是空白的字符(结果缓冲区必须至少有 100 个字节长)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.