|
|
1
28
我认为如果你不想在小数点之前出现一个0,你可能需要做一些类似于use的事情
|
|
2
6
注意 .
|
|
|
3
4
|
|
|
4
2
|
|
5
2
只需将其转换为所需精度的整数
输出:
|
|
|
6
1
标准C库不提供这个,所以你必须自己写。这不是罕见的一次性要求。您迟早需要编写类似的函数来修剪尾随的零并添加数千个分隔符。因此,不仅要获得所需的输出字节,还要更全面地说明如何编写强大的库。进行此操作时,请记住:
所以向后工作:线程安全需要在堆栈上分配存储,这必须从调用方完成。这既不好看也不好玩,但要习惯。这是C路。格式可以有宽度、精度、一些标志和转换类型(f、e、g)。所以让我们来设置宽度和精度参数。与其完全参数化公共API,不如在函数名中设置多个入口点,说明它们使用的标志和转换类型。 令人恼火的是,当将缓冲区传递给函数时,函数需要知道缓冲区的大小。但是如果你把它作为一个单独的参数,这是一个痛苦的过程,但是1)调用者必须编写它,2)调用者可能会弄错它。因此,我个人的风格是制作一个掩蔽宏,该宏假定缓冲区是字符数组,而不是指针,并使用sizeof()将大小传递给获取大小的函数的更详细版本。
(Note COUNT()是我几十年来每周使用的一个宏,用于获取数组中元素的数量。标准C,应该是这样的。) (注:我这里用的是“匈牙利语符号”的方言“d”是双精度的“sz”是以NUL结尾的字符串缓冲区,而“psz”是指向一个字符串缓冲区的指针。这两者之间的区别在于,“sz”可以与COUNT()或sizeof()一起使用以获取数组大小,而“psz”则不能i”是一个整数,特定变量“i”用于循环。
现在,“f”和“+f”版本看起来非常相似,所以让它们都调用一个内部函数。下面是函数,它们接受缓冲区大小,宏自己计算出来(并行函数也是为e和g格式编写的。)
最后是做这项工作的(内部)功能。注意,snprintf()在Windows上需要一个前缀下划线,但在Unix上不需要。
输出为:
额外的测试应该验证函数是否与太小的缓冲区一起工作。 |
|
|
7
0
看来没有简单的解决办法。我可能会使用下面的代码。它不是最快的方法,但是它应该适用于许多不同的格式。它还保留了字符的个数和点的位置。
|
|
|
8
0
这是我的解决办法。
|
|
|
MaPo · Linux,设置锁定ICMP_过滤器选项 1 年前 |
|
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 1 年前 |
|
|
Bobby · 复合字面值总是左值吗? 1 年前 |
|
9-Pin · C: 嵌套结构的堆栈内存分配 1 年前 |