是否可以将任何类型的任何变量转换为字符串?
我写了以下
#define TO_STRING(val) #val
这是将变量转换为字符串的有效方法吗?
是否可以将任何类型的任何变量转换为字符串?
我写了以下
#define TO_STRING(val) #val
这是将变量转换为字符串的有效方法吗?
我认为下面的代码将完成您的工作。我使用标准sprintf
函数,它将任何类型的数据打印到字符串,而不是stdout
. 代码:
#include <stdio.h>
#define INT_FORMAT "%d"
#define FLOAT_FORMAT "%f"
#define DOUBLE_FORMAT "%lf"
#define LL_FORMAT "%lld"
// ect ...
#define CONVERT_TO_STRING(FORMAT, VARIABLE, LOCATION) \
do { \
sprintf(LOCATION, FORMAT, VARIABLE); \
} while(false)
int main() {
char from_int[30];
char from_float[30];
char from_double[30];
char from_ll[30];
CONVERT_TO_STRING(INT_FORMAT, 34, from_int);
CONVERT_TO_STRING(FLOAT_FORMAT, 34.234, from_float);
CONVERT_TO_STRING(DOUBLE_FORMAT, 3.14159265, from_double);
CONVERT_TO_STRING(LL_FORMAT, 9093042143018LL, from_ll);
puts(from_int);
puts(from_float);
puts(from_double);
puts(from_ll);
return 0;
}
您将获得变量名称的字符串版本,即它将转换a
为"a"
. 像这样使用的#
时候称为字符串化操作符。
例如:
#define TO_STRING(val) #val
int main(void)
{
const int a = 12;
print("a is %s\n", TO_STRING(a));
return 0;
}
这将打印a is a
.
你期望会发生什么?
当然,您无法获取变量的value,因为在预处理器运行时(在编译时)它不可用。
试试这将适用于整数:编辑其他数据类型的格式字符串。
sprintf(str,"%d",value);