Несколько вещей. Во-первых, поскольку вы используете void*
(что подходит) для value
, вам необходимо передать void*
в качестве второго аргумента вместо константы. Это будет работать, чтобы скопировать одну переменную в другую, но есть более эффективные способы.
Во-вторых, обратите внимание, что для передачи строки вам нужно передать указатель на указатель char, и char * будет установлен функцией. (Это зависит от вас, является ли это «мягкой копией» или «твердой копией», то есть указывает ли указатель на то же место в памяти или на другую копию той же строки. Вы сказали, что у вас есть set
, так что я предполагаю, у вас уже есть это так, как вы хотите.
вы не включили в свой t_flags перечисление, так что я угадал соответствующие значения.
char c = 'c';
char* str = "str";
int i = 42;
char c2;
char* str2;
char i2;
set(&c2, &c, CHAR); /* presumably you have a CHAR flag? */
set(&str2, &str, CHARPTR); /* presumably you have a CHARPTR flag? */
set(&i2, &i, INT);
Чем больше вопрос для меня, почему вы хотели бы сделать это, особенно так как в вашем флагах вам уже нужно знать тип. Он намного чище (и имеет гораздо лучшую проверку типов):
c2 = c;
str2 = str;
i2 = i;
Я предполагаю, что это просто для изучения функций, или это упрощено для сложной проблемы. В любом случае, так вы это делаете.
Вы передаете только две аргументы функции 'set'. – haccks
Попробуйте 'int i = 42;'. –
Хотя в вашей реализации нет ничего принципиально неправильного, вы просто копируете менее мощный «memcpy» - я рекомендую вам использовать это вместо этого. '#define set (data, value) memcpy (data, value, sizeof (value))' –