我正在寻找一个类似于 sprintf()
的函数实现,可以自动分配所需的内存。因此,我想说:
char *my_str = dynamic_sprintf("Hello %s, this is a %.*s nice %05d string", a, b, c, d);
而my_str
接收的是一个分配的内存块的地址,该内存块保存了sprintf()
的结果。
在另一个论坛上,我读到可以这样解决:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main()
{
char *ret;
char *a = "Hello";
char *b = "World";
int c = 123;
int numbytes;
numbytes = sprintf((char *)NULL, "%s %d %s!", a, c, b);
printf("numbytes = %d", numbytes);
ret = (char *)malloc((numbytes + 1) * sizeof(char));
sprintf(ret, "%s %d %s!", a, c, b);
printf("ret = >%s<\n", ret);
free(ret);
return 0;
}
但是当 sprintf()
函数使用空指针时,会立即导致段错误。
那么有什么想法、解决方案或技巧吗?提供一个类似于 sprintf()
的小型解析器并放入公共领域的实现就足够了,然后我就可以自己完成了。
非常感谢!
snprintf
而不是sprintf
。 - R.. GitHub STOP HELPING ICE