在C语言中将任何变量转换为字符串
是否可以将任何类型的变量转换为字符串 我写了以下内容在C语言中将任何变量转换为字符串,c,string,stringify,stringification,C,String,Stringify,Stringification,是否可以将任何类型的变量转换为字符串 我写了以下内容 #定义为_字符串(val)#val 这是将变量转换为字符串的有效方法吗?您将获得变量名称的字符串版本,即它将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是一个 你预计会发生什么 当然,您无法获取变量的值
#定义为_字符串(val)#val
这是将变量转换为字符串的有效方法吗?您将获得变量名称的字符串版本,即它将
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是一个
你预计会发生什么
当然,您无法获取变量的值,因为在预处理器运行时(编译时),该值不可用。尝试此操作将处理整数:编辑其他数据类型的格式字符串
sprintf(str,"%d",value);
我认为下面的代码将完成您的工作。我使用标准的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;
}
#包括
#定义整数格式“%d”
#定义浮点格式“%f”
#定义双_格式“%lf”
#定义LL_格式“%lld”
//等等。。。
#定义转换为字符串(格式、变量、位置)\
做{\
sprintf(位置、格式、变量)\
}while(假)
int main(){
来自_int[30]的字符;
来自_float的字符[30];
来自双精度[30]的字符;
_ll[30]中的字符;
将_转换为_字符串(INT_格式,34,from_INT);
将_转换为_字符串(FLOAT_格式,从_FLOAT转换为34.234);
将_转换为_字符串(双_格式,3.14159265,来自_-DOUBLE);
将_转换为_字符串(LL_格式,9093042143018LL,来自_LL);
看跌期权(自整);
看跌期权(来自浮点数);
放(从双);
卖出(从ll);
返回0;
}
好的,我是说这个的人,所以我会显得很挑剔:C@user2485710中没有字符串。这是一个非常奇怪的声明。我不知道这是为什么??为了安全起见,{\sprintf(位置、格式、变量);\}而(false)@user2407394:)建议%e
而不是%f
。比较printf(“%e%f\n”,1.23e-8,1.23e-8);printf(“%e%f\n”,1.23e+50,1.23e+50)
1.230000e-08 0.000000
1.230000e+50 229999999994846185700645503654167417200000000.000000
我可以在不知道变量类型的情况下打印变量的值吗?比如一个普通的占位符或者一种打印任何东西的普通方法?