Номер телефона синтаксического анализа в составные части

У меня проблема с использованием void *. Как мне сделать, чтобы использовать эту функцию clean_buffer для массивов int и float (?)

Другие упоминали полезные вещи, такие как необходимость sizeof найти размер, приведение не требуется и альтернативы используйте calloc() для нулевого инициализированного выделения памяти.


Добавить:

sizeof * object_pointer

Используйте sizeof *object_pointer, чтобы найти размер. Он менее подвержен ошибкам, его легче просматривать и поддерживать, чем кодировать в типе.

// clean_buffer( (float *)pf, 10);
// clean_buffer( (int *)pi, 10);

// cast not needed
clean_buffer(pf, sizeof *pf * 10);  // No need to mention type!
clean_buffer(pi, sizeof *pi * 10);

volatile

Очистка памяти после ее окончательного использования склонна к оптимизации, а затем веская причина для не использовать memset(), когда память безопасность вызывает беспокойство. Вместо этого используйте volatile, чтобы не допустить оптимизации самого clean_buffer().

void clean_buffer(void *ptr, size_t n) {
  volatile unsigned char *vuc = ptr;
  for(size_t i = 0; i < n; i++)
    vuc[i]=0;
  }
}
11
задан user1942027 5 May 2014 в 10:20
поделиться

3 ответа

Это - то, которое я использую:

^(?:(?:[\+]?(?<CountryCode>[\d]{1,3}(?:[ ]+|[\-.])))?[(]?(?<AreaCode>[\d]{3})[\-/)]?(?:[ ]+)?)?(?<Number>[a-zA-Z2-9][a-zA-Z0-9 \-.]{6,})(?:(?:[ ]+|[xX]|(i:ext[\.]?)){1,2}(?<Ext>[\d]{1,5}))?$

Я получил его от RegexLib, которому я верю.

3
ответ дан 3 December 2019 в 03:37
поделиться

Этот regex работает точно, как Вы хотите со своими примерами:

Regex regexObj = new Regex(@"\(?(?<AreaCode>[0-9]{3})\)?[-. ]?(?<Exchange>[0-9]{3})[-. ]*?(?<Suffix>[0-9]{4})[-. x]?(?<Extension>[0-9]{3})");
Match matchResult = regexObj.Match("1 (303) 555 -1234-122");

// Now you have the results in groups 
matchResult.Groups["AreaCode"];
matchResult.Groups["Exchange"];
matchResult.Groups["Suffix"];
matchResult.Groups["Extension"];
1
ответ дан 3 December 2019 в 03:37
поделиться

Полоса что-либо это не цифра сначала. Затем все Ваши примеры уменьшают до:

/^1?(\d{3})(\d{3})(\d{4})(\d*)$/

Поддерживать все коды страны немного более сложно, но то же общее правило применяется.

1
ответ дан 3 December 2019 в 03:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: