【问题标题】:Convert any variable to string in C在C中将任何变量转换为字符串
【发布时间】:2013-06-16 03:25:09
【问题描述】:

是否可以将任何类型的任何变量转换为字符串?

我写了以下

#define TO_STRING(val) #val

这是将变量转换为字符串的有效方法吗?

【问题讨论】:

  • 好的,我是这么说的,所以我会显得很挑剔:C 中没有字符串。
  • @user2485710 这是一个很奇怪的说法。

标签: c string stringify stringification


【解决方案1】:

我认为下面的代码将完成您的工作。我使用标准的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;
}

【讨论】:

  • 我暂时不明白这是什么原因??做{\ sprintf(位置,格式,变量); \ } 而(假)
  • @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.0000001.230000e+50 22999999999999994846185700645503654167417200000000.000000
  • 我可以在不知道变量类型的情况下打印变量的值吗?像一般的占位符或打印任何东西的一般方式?
【解决方案2】:

您将获得变量名称的字符串版本,即将a 转换为"a"#当这样使用时称为stringification operator

例如:

#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

你预计会发生什么?

当然,您无法获取变量的 ,因为在预处理器运行时(在编译时)它不可用。

【讨论】:

    【解决方案3】:

    尝试这将适用于整数:编辑其他数据类型的格式字符串。

    sprintf(str,"%d",value);
    

    【讨论】:

      猜你喜欢
      • 2022-01-14
      • 1970-01-01
      • 2012-04-21
      • 2011-03-24
      • 1970-01-01
      • 2015-10-25
      • 2016-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多