每个字符串参数的长度

phi

最近,我开始对这些stdarg.h函数有所了解,因为我想拥有一些类似的东西,printf但是我不想将其写为控制台,而是以字符串形式返回。

到目前为止,这是我想出的:

char *write(const char *format, ...)
{
    // init
    va_list arg;
    char *string;

    va_start (arg, format);
    vsprintf (string, format, arg);

    // done
    va_end (arg);
    return string;
}

现在的问题是,它string没有保留内存,在那儿我需要修复此功能的方法的帮助,因为我还没有找到任何解决方案。

提前致谢

卡米尔库克

使用snprintf(NULL, 0检查多久缓冲你的需要。然后分配内存。然后打印到字符串。

char *my_write(const char *format, ...) {
    va_list va;
    va_start(va, format);

    // remember to have a separate va_list for each v*print function
    va_list va2;
    va_copy(va2, va);
    const int len = vsnprintf(NULL, 0, format, va2);
    va_end(va2);

    char *string = malloc((len + 1) * sizeof(*string));
    if (string != NULL) {
       vsprintf(string, format, va);
    }
    va_end(va);

    return string;
}

正如@IanAbbott在注释中所建议的,您可以调用va_start两次,这似乎很好地简化了代码:

char *my_write(const char *format, ...) {
    va_list va;

    va_start(va, format);
    const int len = vsnprintf(NULL, 0, format, va);
    va_end(va);

    char *string = malloc((len + 1) * sizeof(*string));
    if (string == NULL) {
       return NULL;
    }

    va_start(va, format);
    vsprintf(string, format, va);
    va_end(va);

    return string;
}

在带有glibc的平台上,您也可以使用vasprintf请注意,该名称write已被posix write()函数使用,我建议使用其他名称。有了vasprintfGNU扩展,它就变成了:

#define _GNU_SOURCE
#include <stdio.h>
char *write2(const char *format, ...) {
    va_list va;
    va_start(va, format);
    char *string;
    const int err = vasprintf(&string, format, va);
    va_end(va);
    if (err == -1) {
          return NULL;
    }
    return string;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

生成每个字符串的长度

来自分类Dev

比较每个字符的字符串字符,按长度分割字符串也可以

来自分类Dev

如何通过python计算属于字符串列表的每个字符串长度?

来自分类Dev

计算每个位置n个长度的字符串和n个字符的组合

来自分类Dev

编写一个将字符串列表作为参数并返回包含每个字符串长度的列表的函数

来自分类Dev

在R中的数据帧的列中查找每个字符串的长度

来自分类Dev

计算数组中每个字符串的长度

来自分类Dev

使用类型类计算每个字符串长度的总和

来自分类Dev

我是否需要转义每个字符串,转义字符串的最大长度是多少?

来自分类Dev

数组javascript中的单个字符串长度

来自分类Dev

在每个字符处分割字符串

来自分类Dev

XSLT在每个字符上分割字符串

来自分类Dev

在字符串中的每个字符之间添加“-”?

来自分类Dev

如何遍历字符串的每个字符?

来自分类Dev

快速获取字符串的每个字符

来自分类Dev

在数组中添加长度或每个字符串,并创建一个新数组,并附加结果

来自分类Dev

AutoCompleteStringCollection,每个字符串带有标签

来自分类Dev

如何遍历列表中的每个字符串?

来自分类Dev

Bash在每个字符串中添加\ r

来自分类Dev

显示列表中每个字符串的索引

来自分类Dev

为什么sscanf跳过每个字符串的前4个字符?

来自分类Dev

连接列表中 2 个字符串中的每个字符

来自分类Dev

在R中的多个字符串中选择可变长度字符串

来自分类Dev

查找字符串的最大长度+在Oracle SQL中是哪个字符串

来自分类Dev

Java处理多个字符串参数

来自分类Dev

在PowerShell中传递多个字符串参数

来自分类Dev

WebAPI路由:单个字符串参数

来自分类Dev

Haskell:字符串B中的字符串A中每个字符出现的总和

来自分类Dev

如何遍历字符串向量中每个字符串中的字符?

Related 相关文章

  1. 1

    生成每个字符串的长度

  2. 2

    比较每个字符的字符串字符,按长度分割字符串也可以

  3. 3

    如何通过python计算属于字符串列表的每个字符串长度?

  4. 4

    计算每个位置n个长度的字符串和n个字符的组合

  5. 5

    编写一个将字符串列表作为参数并返回包含每个字符串长度的列表的函数

  6. 6

    在R中的数据帧的列中查找每个字符串的长度

  7. 7

    计算数组中每个字符串的长度

  8. 8

    使用类型类计算每个字符串长度的总和

  9. 9

    我是否需要转义每个字符串,转义字符串的最大长度是多少?

  10. 10

    数组javascript中的单个字符串长度

  11. 11

    在每个字符处分割字符串

  12. 12

    XSLT在每个字符上分割字符串

  13. 13

    在字符串中的每个字符之间添加“-”?

  14. 14

    如何遍历字符串的每个字符?

  15. 15

    快速获取字符串的每个字符

  16. 16

    在数组中添加长度或每个字符串,并创建一个新数组,并附加结果

  17. 17

    AutoCompleteStringCollection,每个字符串带有标签

  18. 18

    如何遍历列表中的每个字符串?

  19. 19

    Bash在每个字符串中添加\ r

  20. 20

    显示列表中每个字符串的索引

  21. 21

    为什么sscanf跳过每个字符串的前4个字符?

  22. 22

    连接列表中 2 个字符串中的每个字符

  23. 23

    在R中的多个字符串中选择可变长度字符串

  24. 24

    查找字符串的最大长度+在Oracle SQL中是哪个字符串

  25. 25

    Java处理多个字符串参数

  26. 26

    在PowerShell中传递多个字符串参数

  27. 27

    WebAPI路由:单个字符串参数

  28. 28

    Haskell:字符串B中的字符串A中每个字符出现的总和

  29. 29

    如何遍历字符串向量中每个字符串中的字符?

热门标签

归档