ΠΡΠΎΡ ΡΠ»ΡΡΠ°ΠΉ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅Ρ Π²Π°ΠΆΠ½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ. Π§Π°ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ΅ΡΡ '
array != NULLif (array == NULL) return -1;Π’Π΅ΡΡ '
size > 0sizelsearch()size <= 0ΠΠΎΠ³ΠΈΠΊΠ°, ΡΡΠΎΡΡΠ°Ρ Π·Π° ΠΎΡΠΌΠ΅Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΡΠ½ΠΈΠ·ΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½Ρ Π² Π·Π°ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π₯ΠΎΠ°Ρ [123], ΠΎΠ΄Π½Π°ΠΊΠΎ, ΡΠ΄Π΅Π»Π°Π» ΡΠ°ΠΊΠΎΠ΅ Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅:
Β«Π ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ², Π°Π±ΡΡΡΠ΄Π½ΠΎ Π΄Π΅Π»Π°ΡΡ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΡ Π·Π°ΠΏΡΡΠΊΠ°Ρ , ΠΊΠΎΠ³Π΄Π° ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π΄ΠΎΠ²Π΅ΡΠΈΡ, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ΄Π°Π»ΡΡΡ ΠΈΡ ΠΈΠ· ΡΠΈΠ½Π°Π»ΡΠ½ΡΡ Π²Π΅ΡΡΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΎΡΠΈΠ±ΠΎΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΡΠΎΠ³ΠΈΠΌ ΠΈΠ»ΠΈ ΠΊΠ°ΡΠ°ΡΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈΠΌ. Π§ΡΠΎ Π±Ρ ΠΌΡ ΠΏΠΎΠ΄ΡΠΌΠ°Π»ΠΈ ΠΎΠ± ΡΠ½ΡΡΠ·ΠΈΠ°ΡΡΠ΅-ΠΌΠΎΡΠ΅ΠΏΠ»Π°Π²Π°ΡΠ΅Π»Π΅, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Π΄Π΅Π²Π°Π΅Ρ ΡΠ²ΠΎΠΉ ΡΠΏΠ°ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΆΠΈΠ»Π΅Ρ ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΡΠΎΠ²ΠΊΠ΅ Π½Π° ΡΡΡ ΠΎΠΉ Π·Π΅ΠΌΠ»Π΅ ΠΈ ΡΠ½ΠΈΠΌΠ°Π΅Ρ Π΅Π³ΠΎ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΡ ΠΎΠ΄ΠΈΡ Π² ΠΌΠΎΡΠ΅?Β»
Π‘ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΌΠ½Π΅Π½ΠΈΡΠΌΠΈ, Π½Π°ΡΠ° ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π²ΠΎ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ- Π²ΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π²ΠΌΠ΅ΡΡΠΎ Π½Π΅Π³ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠΎ-Π²ΡΠΎΡΡΡ , ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΠ΅ ΡΠ²ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, ΡΡΠΎΠ±Ρ Π½Π΅ Π±ΡΠ»ΠΎ Π²ΠΎΠ·ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΡΠΎΡΠΈΠ² ΠΈΡ ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½Π° ΡΠ²ΠΎΠ΅ΠΌ ΠΌΠ΅ΡΡΠ΅ Π»Π°ΠΆΠ΅ Π² ΡΠΈΠ½Π°Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΎΡΠΌΠ΅ΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΈΠ· ΡΠ°Π·Π΄Π΅Π»Π° Β«ΠΡΠΈΠ±ΠΊΠΈΒ» ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ GNU/Linux assert(3):
assert()NDEBUGΠΠ½Π°ΠΌΠ΅Π½ΠΈΡΡΠΉ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡΠΈ ΠΠ΅ΠΉΠ·Π΅Π½Π±Π΅ΡΠ³Π° ΠΈΠ· ΡΠΈΠ·ΠΈΠΊΠΈ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΡΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΡΠ½ΠΎ Π²Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ°ΡΡΠΈΡΡ, ΡΠ΅ΠΌ ΠΌΠ΅Π½Π΅Π΅ ΡΠΎΡΠ½ΠΎ Π²Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ Π΅Π΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ. Π ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ Π½Π΅ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»Π° ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΡΠΎ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠ°ΠΊΡ Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΡ ΡΠ°ΡΡΠΈΡΡ Π²Π»ΠΈΡΠ΅Ρ Π½Π° Π½Π΅Π΅.
Π‘Ρ ΠΎΠ΄Π½ΠΎΠ΅ ΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ²Π΅ΡΡΠ°Π΅ΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ, Π½Π΅ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΌ Ρ ΡΠΈΠ·ΠΈΠΊΠΎΠΉ ΡΠ°ΡΡΠΈΡ: Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΈΠ»ΠΈ Π·Π°ΠΏΡΡΠΊΠ° Π΅Π΅ Π° ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½Π°Ρ ΠΎΡΠΈΠ±ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΡΠ΅Π·Π½ΡΡΡ. Π’Π°ΠΊΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠ΅ Π½Π°Π·ΡΠ²Π°ΡΡ Π³Π΅ΠΉΠ·Π΅Π½Π±Π΅ΡΠ³ΠΎΠ²ΡΠΊΠΈΠΌΠΈ.
Π‘ΠΏΡΠ°Π²ΠΎΡΠ½Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ΅ΡΠ΅Π³Π°Π΅Ρ Π½Π°Ρ ΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π°Ρ
assert()assert(*p++ == '\n');ΠΠ΄Π΅ΡΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΌ ΡΡΡΠ΅ΠΊΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ p ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ ΡΠ΅ΡΡΠ°. ΠΠΎΠ³Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½
NDEBUG12.2. ΠΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²Π°Ρ ΠΏΠ°ΠΌΡΡΡ: ΡΡΠ½ΠΊΡΠΈΠΈ
mem<i>XXX</i>()ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ ΠΏΠ°ΠΌΡΡΠΈ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ ΡΠ»ΡΠΆΠ±Ρ. ΠΡΠ΅ ΠΈΡ ΠΈΠΌΠ΅Π½Π° Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠ° '
mem#include <string.h> /* ISO C */void *memset(void *buf, int val, size_t count);void *memcpy(void *dest, const void *src, size_t count);void *memmove(void *dest, const void *src, size_t count);void *memccpy(void *dest, const void *src, int val, size_t count);int memcmp(const void *buf1, const void *buf2, size_t count);void *memchr(const void *buf, int val, size_t count);12.2.1. ΠΠ°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ:
memset()Π€ΡΠ½ΠΊΡΠΈΡ
memset()unsigned charcountbufvoid *p = malloc(count);if (p != NULL)Β memset(p, 0, count);ΠΠ΄Π½Π°ΠΊΠΎ
memset()buf12.2.2. ΠΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ:
memcpy()memmove()memccpy()Π’ΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠΎΠΏΠΈΡΡΡΡ ΠΎΠ΄ΠΈΠ½ Π±Π»ΠΎΠΊ ΠΏΠ°ΠΌΡΡΠΈ Π² Π΄ΡΡΠ³ΠΎΠΉ. ΠΠ΅ΡΠ²ΡΠ΅ Π΄Π²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΠΈΡ ΡΡ ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ ΠΏΠ°ΠΌΡΡΠΈ; ΡΡΠ΅ΡΡΡ ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ ΠΏΠ°ΠΌΡΡΡ, Π½ΠΎ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ Π²ΡΡΡΠ΅ΡΠ΅ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ.
void *memcpy(void *dest, const void *src, size_t count)ΠΡΠΎ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ. ΠΠ½Π° ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ
countsrcdestdestvoid *memmove(void *dest, const void *src, size_t count)ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ
memcpy()countsrcdestdestvoid *memccpy(void *dest, const void *src, int val, size_t count)ΠΡΠ° ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ Π±Π°ΠΉΡΡ ΠΈΠ·
srcdestvaldestcountvaldestvalNULLΠ’Π΅ΠΏΠ΅ΡΡ, Π² ΡΠ΅ΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΠ΅ΠΉΡΡ ΠΏΠ°ΠΌΡΡΡΡ? Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΈΡ. 12.1.

Π ΠΈΡ. 12.1. ΠΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΠΈΠ΅ΡΡ ΠΊΠΎΠΏΠΈΠΈ
Π¦Π΅Π»ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΡΡΡΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°
struct xyzdata[0]data[3]data[3]data[6]data[3]data[0]data[3]data[6]