Регулярные выражения были бы самым быстрым решением кодировать, но если у Вас будет много различных маркеров затем, то это станет медленнее. Если производительность не является проблемой, затем используют эту опцию.
А лучший подход должен был бы определить маркер, как Ваш "##", для которого можно просканировать в тексте. Затем выберите, что заменить из хеш-таблицы текстом, который следует за маркером как за ключом.
, Если это - часть сценария сборки затем, nAnt имеет замечательную особенность для того, чтобы сделать этот названный Цепочки Фильтра . Код для этого является открытым исходным кодом, таким образом, Вы могли посмотреть на как его сделанный для внедрения FAST.
*((int*)data[0])=x;
сделает это.
Вы можете рассмотреть возможность использования объединения. Примерно так:
union myvalues
{
int i;
double d;
long l;
};
Тогда у вас может быть
union myvalues *foo[10];
foo[0] = malloc(sizeof(union myvalues));
foo[0]->i = x;
Вы также можете typedef
объединение. sizeof (union myvalues)
будет максимальным из sizeof
членов. Итак, если у вас есть int i;
и char c [40]
в объединении, sizeof (union myvalues)
будет 40. Запись в i
затем перезапишет первые 4 символа в c
(при условии, что ваши целые числа составляют 4 байта).
по причинам псевдонима. лучше сделать
mempcy( data[0], &x, sizeof( int ) );
Как это бывает, компилятор оптимизирует вызов memcpy, поскольку sizeof (int) является постоянным значением, но не нарушает различные правила псевдонима.
Хотя вы можете использовать приведение для выполнения присваивания, вероятно, будет намного проще написать такой код, как:
void *data[ 10 ]; int x = 100; int *p; p = malloc( sizeof *p ); data[ 0 ] = p; *p = x;
*((int *)data[0]) = x;
Будет сделана копия x, поэтому факт, что это локальная переменная не важна.
попробуйте следующее:
data[0] = malloc(sizeof(int));
*((int*)data[0]) = x;
или
(int) (*(data[0])) = x;
не забудьте потом
free (data[0]);
.