Можно ли преобразовать любую переменную любого типа в строку?Преобразование любой переменной в строку в C
Я написал следующее
#define TO_STRING(val) #val
Является ли это действительный способ преобразования переменной в строку?
Можно ли преобразовать любую переменную любого типа в строку?Преобразование любой переменной в строку в C
Я написал следующее
#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;
}
Я не мог понять причину этого пока ?? do {\ sprintf (РАСПОЛОЖЕНИЕ, ФОРМАТ, ПЕРЕМЕННАЯ); \ } while (false) – user2407394
@ 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 22999999999999994846175700645503654167417200000000.000000' – chux
Вы получите строковую версию имя переменной, то есть он будет конвертировать 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
.
Что вы ожидаете от этого?
Вы не можете получить значение переменной переменной, конечно, поскольку это невозможно, когда выполняется предварительный процессор (который находится во время компиляции).
попробуйте это будет работать с целыми числами: отредактируйте строку формата для других типов данных.
sprintf(str,"%d",value);
нормально, я один говорю, что это так, я появлюсь как придирчивый один: нет строки в C. – user2485710
@ user2485710 Это довольно странное заявление. – unwind