c - 如何在 C 中将任何数据类型转换为字符串(不知道它的类型)

标签 c string variadic-functions

我正在尝试编写一个函数,它接受任意数量的参数格式化并将其打印到控制台。我希望函数具有以下签名

void formatted_text(...);

我希望以下列方式调用此函数。

formatted_text("String 1", 1, "String 2", 2.2);

现在的问题是,在函数中我不知道哪个参数是哪种数据类型。一种解决方案是我可以要求用户将所有参数转换为字符串,然后像这样将其传递给函数

formatted_text("String 1", "1", "String 2", "2.2");

但是使用起来不是很方便。我可以做的另一件事是要求用户为每个参数提供数据类型,这又不是一个很好的解决方案。

有没有办法在不知道数据类型的情况下将任何数据类型转换为字符串。我知道答案......,但你可能知道一些我不知道的事情。

处理这种需求之王的最佳方法是什么。

最佳答案

C 数据类型本质上不是自描述的,就像它们通常在其他语言(如 Java、Python、PHP 等)中一样。您必须提供一些元数据,以便 formatted_text(.. .) 可以知道如何解释你在堆栈上传递给它的字节。正如评论中提到的,您传递给 printf 的格式字符串(即第一个参数)是元数据可以采用的一种形式。

关于c - 如何在 C 中将任何数据类型转换为字符串(不知道它的类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14638298/

相关文章:

c - 读取 .txt 文件,C

无法通过 malloc

java - equals with strings 产生错误的结果

linux - 计算单词中的大写字符

java - 如何使用 Scala 的 AnyVal 调用 Java 可变参数方法?

c - 传递 __VA_ARGS__ 时第一个参数是错误的

c - 读取一个txt文件,并在C中内存成int或long

string - 寻找基于 Lua 的解决方案,将字符串拆分为两个或多个组件

function - 为什么在函数的任何表达式中使用 ... 会导致 Lua 中 arg 的值为 nil?

c - 在 C 中设置和清除位