2013-06-19 2 views
2

Можно ли преобразовать любую переменную любого типа в строку?Преобразование любой переменной в строку в C

Я написал следующее

#define TO_STRING(val) #val

Является ли это действительный способ преобразования переменной в строку?

+3

нормально, я один говорю, что это так, я появлюсь как придирчивый один: нет строки в C. – user2485710

+4

@ user2485710 Это довольно странное заявление. – unwind

ответ

2

Я думаю, что код ниже выполнит вашу работу. Я использую стандартную функцию 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; 
} 
+0

Я не мог понять причину этого пока ?? do {\ sprintf (РАСПОЛОЖЕНИЕ, ФОРМАТ, ПЕРЕМЕННАЯ); \ } while (false) – user2407394

+1

@ user2407394 только для безопасности :) –

+0

Рекомендовать '% 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

3

Вы получите строковую версию имя переменной, то есть он будет конвертировать 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); 

 Смежные вопросы

  • Нет связанных вопросов^_^