|
|
1
7
名字
如果你不想依赖你的平台,我还是建议你遵循这个模式。在C中返回新分配内存的字符串处理函数通常比它们在长期运行中的价值要麻烦得多,因为大多数情况下,您最终会进行进一步的操作,因此您必须释放大量中间结果。例如,比较:
与。
下面是
下面是一个结合了snprintf风格的缓冲区长度方法:
|
|
|
2
10
|
|
|
3
3
|
|
4
3
好的
根据需要定制错误处理(需要C99或更高版本):
|
|
|
5
2
我不太清楚你从哪儿来的
HTH公司 |
|
|
6
2
我发现了一个有趣的资源,用于处理itoa实现的几个不同问题
|
|
|
7
1
|
|
|
8
1
sprintf相当慢,如果性能很重要的话,它可能不是最好的解决方案。
const char digits[]={0',1',2',3',4',5',6',7',8',9',a',b',c',d',e',f'};
对于小数,最好使用一个足够大的静态数组,以逆序记录数字,请参见 here |
|
|
9
1
|
|
|
10
0
如果您不想使用数学/浮点函数(并且必须在数学库中链接),您应该能够通过搜索Web找到非浮点版本的log10,并执行以下操作: 尺寸长度=我的log10(abs(x))+1; 这可能会给你比你需要的多1个字节,但你已经有足够的字节了。 |
|
|
11
0
我可以提几个建议。您可以使用静态缓冲区和strdup来避免在后续调用中重复分配过多内存。我还要添加一些错误检查。
如果这将在多线程环境中调用,请从缓冲区声明中删除“static”。 |
|
|
12
-1
|
|
|
MaPo · Linux,设置锁定ICMP_过滤器选项 1 年前 |
|
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 1 年前 |
|
|
Bobby · 复合字面值总是左值吗? 1 年前 |
|
9-Pin · C: 嵌套结构的堆栈内存分配 1 年前 |