gpt4 book ai didi

c - 通过 snprintf 在 C 中填充静态字符串缓冲区

转载 作者:太空宇宙 更新时间:2023-11-04 11:39:08 24 4
gpt4 key购买 nike

我有一些缓冲区和已知大小

#define BUFFER_SIZE 1024*1024
char buffer[BUFFER_SIZE];

我必须用一些复杂的字符串填充这个缓冲区。

int populate_string(char *buffer) {
char *tbuffer = buffer;
size_t tsize = BUFFER_SIZE;
int rv;

rv = snprintf(tbuffer, tsize, "foobar %s %d %s %D", ...);
if (rv < 0) {
printf("snprintf() error");
return -1;
} else if (rv >= tsize) {
printf("overflow, increase buffer size");
return -1;
} else {
tsize -= rv;
tbuffer += rv;
}

// repeat snprintf's until string is fully populated

return 0;
}

所以,我有三个问题:

  1. 这是动态填充静态字符串的最佳方式吗?
  2. 我填充字符串的方式安全吗?
  3. 如何减少行数?这些返回值检查占据了很多位置,尤其是在有很多 snprintfs 的情况下。

最佳答案

  1. 然后取决于您如何处理这个字符串 :) 显而易见的替代方法是使用链接列表。
  2. 是的,很安全。
  3. 有时不需要检查 snprintf 是否错误或溢出 - 因此您可以只使用一个 if() 检查。

关于c - 通过 snprintf 在 C 中填充静态字符串缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5120182/

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