Функция
memcpy()memmove()memcpy()memmove()Какую из них использовать в своем коде? Для библиотечной функции, которая не знает, какие области памяти ей передаются, следует использовать
memmove()memcpy()Как для
memcpy()memmove()strcpy()dest = src;(Справочные страницы во многих системах не помогают, предлагая прототип в виде '
void *memcpy(void *buf1, void *buf2, size_t n)12.2.3. Сравнение блоков памяти:
memcmp()Функция
memcmp()countstrcmp()Вы можете поинтересоваться: «Почему бы не использовать для такого сравнения
strcmp()memcmp()\0memcmp()Другим преимуществом
memcmp()/* memcmp --- пример реализации на С, НЕ для реального использования */int memcmp(const void *buf1, const void *buf2, size_t count) { const unsigned char *cp1 = (const unsigned char*)buf1; const unsigned char *cp2 = (const unsigned char*)buf2; int diff; while (count-- != 0) { diff = *cp1++ - *cp2++; if (diff != 0) return diff; } return 0;}Скорость может быть достигнута в результате использования специальных инструкций «блочного сравнения памяти», которые поддерживают многие архитектуры, или в результате сравнения единиц, превышающих байты. (Эта последняя операция коварна, и лучше оставить ее автору библиотеки.)
По этим причинам всегда следует использовать вашу библиотечную версию
memcmp()12.2.4. Поиск байта с данным значением:
memchr()Функция
memchr()strchr()memcmp()strcmp()memchr()GNU
wcmemchr()wсwc.c257 else if (!count_chars && !count_complicated)258 {259 /* Использует отдельный цикл при подсчете лишь строк или строк и байтов -260 но не символов или слов. */261 while ((bytes_read = safe_read(fd, buf, BUFFER_SIZE)) > 0)262 {263 register char *p = buf;264265 if (bytes_read == SAFE_READ_ERROR)266 {267 error(0, errno, "%s", file);268 exit_status = 1;269 break;270 }271272 while ((p = memchr(p, '\n', (buf + bytes_read) - p)))273 {274 ++p;275 ++lines;276 }277 bytes += bytes_read;278 }279 }Внешний цикл (строки 261–278) читает блоки данных из входного файла. Внутренний цикл (строки 272–276) использует
memchr()(buf + bytes_read) - рКомментарии в строках 259–260 нуждаются в некотором объяснении. Вкратце, современные системы могут использовать символы, занимающие более одного байта в памяти и на диске. (Это несколько более подробно обсуждается в разделе 13.4 «Не могли бы вы произнести это для меня по буквам?».) Таким образом,
wc12.3. Временные файлы
Временный файл является в точности тем, что звучит в его названии: файл, в котором при исполнении программы хранятся данные, которые больше не нужны после завершения программы.
sort-sortвсеsortsort