printf返回一个字符串

时间:2014-10-10 01:38:20

标签: c string function return printf

是否有类似printf的函数可以返回字符串而不是打印它?我有一个以某种颜色打印字符串的函数,但它必须是字符串文字,而不是接受像printf这样的变量。

// Function declaration (Assums YELLOW and NORMAL are the unix constants for terminal colors
void pYellow(char *str) {
    printf("%s%s%s", YELLOW, str, NORMAL);
}

//Function call 
void pYellow("This is a string");

如果我想用变量打印颜色,它就不会起作用。像pYellow("Num: %d", 42);一样会出错,因为它的参数太多了。做pYellow(printf("String"));也不会有效。

TL:DR我想知道是否有一个printf方法返回一个字符串而不是打印它。

1 个答案:

答案 0 :(得分:2)

使用snprintf

int snprintf(char *str, size_t size, const char *format, ...);
  • str是您分配的缓冲区(例如malloc()
  • size是该缓冲区的大小
  • 通话结束后,格式化的字符串存储在str
  • 还有sprintf从不使用

您还可以使用printf系列函数创建自己的v*printf类功能。最简单的例子:

#include <stdarg.h>
// required for va_list, va_start, va_end

void customPrintf(const char* format, /* additional arguments go here */ ...)
{
    va_list args;
    va_start(args, format);
    // set color here (for example)
    vprintf(format, args);
    // reset color
    va_end(args);
}