gpt4 book ai didi

c++ - unsigned long 的 snprintf 附加逗号

转载 作者:太空宇宙 更新时间:2023-11-04 01:12:31 28 4
gpt4 key购买 nike

我尝试将 unsigned long 转换为字符串,并在其末尾附加一个逗号。编译和运行测试代码时,您可以在下面找到,我得到以下输出:

"1234," "1234"
"1234"

测试代码为:

#include <cstdio>
#include <iostream>

int main () {

unsigned long c = 1234;
char ch[50];
char ch1[50];

sprintf(ch, "%lu,", c);
std::cout << "\"" << ch << "\"" << " \"" << c << "\"" << std::endl;

snprintf(ch1, 5, "%s", ch);
std::cout << "\"" << ch1 << "\"" << std::endl;

return 1;
}

据我了解,ch 的长度应为 5,即 4 位数字加上逗号 1。

我是否错过了终止字符的额外加一?

干杯!

最佳答案

传递给 snprintf 的大小包括终止空字符。虽然没有打印出来,但还是会占用缓冲区的空间。

您应该改为传递 strlen(ch) + 1。或者甚至更好,只需 sizeof(ch1) 就足够了,因为您希望在填充缓冲区之前容纳整个结果。

还要确保目标缓冲区的大小始终足够,等于或大于您传递给 snprintf 的大小。在您的特定情况下,这几乎不可能发生,但通常您应该牢记这一点。

关于c++ - unsigned long 的 snprintf 附加逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9126637/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com