gpt4 book ai didi

c - 是否存在这样的功能? void str_realloc_and_concat(char *str, const char *format, ...)

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

我想知道是否存在这样的函数:

void str_realloc_and_concat(char *str, const char *format, ...)

此函数将采用 char *str(已分配或​​ NULL),并将 *format 附加到它。我正在寻找类似带有重新分配、strcpy 和串联的 sprintf 的东西。

它是否存在或我必须对其进行编码?感谢您的投入。

更新该库必须在嵌入式设备上使用,所以我不想使用 GNU 扩展,因为我不确定我是否会拥有它们。

最佳答案

下面是这样一个函数的实现。据我所知,标准 C 库不包含您要查找的函数。请注意,我建议将目标字符串作为双指针传递,因为 realloc 可能会更改指针:

#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include <stdlib.h>

const char *prefix = "Hello";

void str_realloc_and_concat(char **str, const char *format, ...)
{
va_list ap;
int i, n;
char *s;

n = strlen(*str);
va_start(ap, format);
i = vasprintf(&s, format, ap);
*str = (char *)(realloc(*str, n + i + 1));
if (*str != NULL)
strncpy(&(*str)[n], s, i);
va_end(ap);
}

int main()
{
char *s = (char *)(malloc(strlen(prefix)));
strncpy(s, prefix, strlen(prefix));
str_realloc_and_concat(&s, " %s", "world!");
printf("%s\n", s);
return 0;
}

关于c - 是否存在这样的功能? void str_realloc_and_concat(char *str, const char *format, ...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8168030/

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