3

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

我写了以下

#define TO_STRING(val) #val

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

4

3 回答 3

3

我认为下面的代码将完成您的工作。我使用标准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;
}
于 2013-06-19T16:06:04.027 回答
3

您将获得变量名称的字符串版本,即它将转换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,因为在预处理器运行时(在编译时)它不可用。

于 2013-06-19T14:26:18.053 回答
3

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

sprintf(str,"%d",value);
于 2013-06-19T15:01:19.560 回答