Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中将任何变量转换为字符串_C_String_Stringify_Stringification - Fatal编程技术网

在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
我可以在不知道变量类型的情况下打印变量的值吗?比如一个普通的占位符或者一种打印任何东西的普通方法?