ΠΡΠΎΡ ΡΠ»ΡΡΠ°ΠΉ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅Ρ Π²Π°ΠΆΠ½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ. Π§Π°ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ΅ΡΡ 'array != NULL' Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΠ» Π±ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΎΠΉ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ:
if (array == NULL) return -1;
Π’Π΅ΡΡ 'size > 0' (ΡΡΡΠΎΠΊΠ° 13) ΠΌΠ΅Π½Π΅Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΡΠΈΡΠ΅Π½; Π΅ΡΠ»ΠΈ size ΡΠ°Π²Π΅Π½ 0 ΠΈΠ»ΠΈ ΠΌΠ΅Π½ΡΡΠ΅ 0, ΡΠΈΠΊΠ» Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΡΡ, ΠΈ lsearch() (ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ) Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡ -1. (ΠΠΎ ΠΏΡΠ°Π²Π΄Π΅, ΡΡΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π΅ Π½ΡΠΆΠ΅Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠΎΠ΄ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΠ»ΡΡΠ°ΠΉ 'size <= 0'.)
ΠΠΎΠ³ΠΈΠΊΠ°, ΡΡΠΎΡΡΠ°Ρ Π·Π° ΠΎΡΠΌΠ΅Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΡΠ½ΠΈΠ·ΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½Ρ Π² Π·Π°ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π₯ΠΎΠ°Ρ[123], ΠΎΠ΄Π½Π°ΠΊΠΎ, ΡΠ΄Π΅Π»Π°Π» ΡΠ°ΠΊΠΎΠ΅ Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅:
Β«Π ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ², Π°Π±ΡΡΡΠ΄Π½ΠΎ Π΄Π΅Π»Π°ΡΡ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΡ Π·Π°ΠΏΡΡΠΊΠ°Ρ , ΠΊΠΎΠ³Π΄Π° ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π΄ΠΎΠ²Π΅ΡΠΈΡ, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ΄Π°Π»ΡΡΡ ΠΈΡ ΠΈΠ· ΡΠΈΠ½Π°Π»ΡΠ½ΡΡ Π²Π΅ΡΡΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΎΡΠΈΠ±ΠΎΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΡΠΎΠ³ΠΈΠΌ ΠΈΠ»ΠΈ ΠΊΠ°ΡΠ°ΡΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈΠΌ. Π§ΡΠΎ Π±Ρ ΠΌΡ ΠΏΠΎΠ΄ΡΠΌΠ°Π»ΠΈ ΠΎΠ± ΡΠ½ΡΡΠ·ΠΈΠ°ΡΡΠ΅-ΠΌΠΎΡΠ΅ΠΏΠ»Π°Π²Π°ΡΠ΅Π»Π΅, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Π΄Π΅Π²Π°Π΅Ρ ΡΠ²ΠΎΠΉ ΡΠΏΠ°ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΆΠΈΠ»Π΅Ρ ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΡΠΎΠ²ΠΊΠ΅ Π½Π° ΡΡΡ ΠΎΠΉ Π·Π΅ΠΌΠ»Π΅ ΠΈ ΡΠ½ΠΈΠΌΠ°Π΅Ρ Π΅Π³ΠΎ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΡ ΠΎΠ΄ΠΈΡ Π² ΠΌΠΎΡΠ΅?Β»
Π‘ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΌΠ½Π΅Π½ΠΈΡΠΌΠΈ, Π½Π°ΡΠ° ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π²ΠΎ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ- Π²ΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π²ΠΌΠ΅ΡΡΠΎ Π½Π΅Π³ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠΎ-Π²ΡΠΎΡΡΡ , ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΠ΅ ΡΠ²ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, ΡΡΠΎΠ±Ρ Π½Π΅ Π±ΡΠ»ΠΎ Π²ΠΎΠ·ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΡΠΎΡΠΈΠ² ΠΈΡ ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½Π° ΡΠ²ΠΎΠ΅ΠΌ ΠΌΠ΅ΡΡΠ΅ Π»Π°ΠΆΠ΅ Π² ΡΠΈΠ½Π°Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΎΡΠΌΠ΅ΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΈΠ· ΡΠ°Π·Π΄Π΅Π»Π° Β«ΠΡΠΈΠ±ΠΊΠΈΒ» ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ GNU/Linux assert(3):
assert() ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ ΠΌΠ°ΠΊΡΠΎΡ: Π΅ΡΠ»ΠΈ Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΅ΡΡΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ, ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠΆΠ΅Ρ ΠΌΠ΅Π½ΡΡΡΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π»ΠΈ NDEBUG. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π³Π΅ΠΉΠ·Π΅Π½Π±Π΅ΡΠ³ΠΎΠ²ΡΠΊΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΡΠ΅Π·Π°ΡΡ ΠΏΡΠΈ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΠ΅ΠΆΠΈΠΌΠ° ΠΎΡΠ»Π°Π΄ΠΊΠΈ.
ΠΠ½Π°ΠΌΠ΅Π½ΠΈΡΡΠΉ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡΠΈ ΠΠ΅ΠΉΠ·Π΅Π½Π±Π΅ΡΠ³Π° ΠΈΠ· ΡΠΈΠ·ΠΈΠΊΠΈ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΡΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΡΠ½ΠΎ Π²Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ°ΡΡΠΈΡΡ, ΡΠ΅ΠΌ ΠΌΠ΅Π½Π΅Π΅ ΡΠΎΡΠ½ΠΎ Π²Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ Π΅Π΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ. Π ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ Π½Π΅ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»Π° ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΡΠΎ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠ°ΠΊΡ Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΡ ΡΠ°ΡΡΠΈΡΡ Π²Π»ΠΈΡΠ΅Ρ Π½Π° Π½Π΅Π΅.
Π‘Ρ ΠΎΠ΄Π½ΠΎΠ΅ ΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ²Π΅ΡΡΠ°Π΅ΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ, Π½Π΅ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΌ Ρ ΡΠΈΠ·ΠΈΠΊΠΎΠΉ ΡΠ°ΡΡΠΈΡ: Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΈΠ»ΠΈ Π·Π°ΠΏΡΡΠΊΠ° Π΅Π΅ Π° ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½Π°Ρ ΠΎΡΠΈΠ±ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΡΠ΅Π·Π½ΡΡΡ. Π’Π°ΠΊΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠ΅ Π½Π°Π·ΡΠ²Π°ΡΡ Π³Π΅ΠΉΠ·Π΅Π½Π±Π΅ΡΠ³ΠΎΠ²ΡΠΊΠΈΠΌΠΈ.
Π‘ΠΏΡΠ°Π²ΠΎΡΠ½Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ΅ΡΠ΅Π³Π°Π΅Ρ Π½Π°Ρ ΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π°Ρ assert() Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Ρ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΌΠΈ ΡΡΡΠ΅ΠΊΡΠ°ΠΌΠΈ:
assert(*p++ == '\n');
ΠΠ΄Π΅ΡΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΌ ΡΡΡΠ΅ΠΊΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ p ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ ΡΠ΅ΡΡΠ°. ΠΠΎΠ³Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ NDEBUG, Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΡΡΠ΅Π·Π°Π΅Ρ ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°; ΠΎΠ½ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠΉ Π½Π΅ΡΠ΄Π°ΡΠ΅. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ΅ ΠΊ ΠΎΡΠ»Π°Π΄ΠΊΠ΅ Π·Π°ΠΏΡΠ΅Ρ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΎΡΠΌΠ΅Π½ΡΠ΅ΡΡΡ, Π²ΡΠ΅ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΡΠ½ΠΎΠ²Π° ΡΠ°Π±ΠΎΡΠ°ΡΡ! Π’Π°ΠΊΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΡΡΠ΄Π½ΠΎ ΠΎΡΡΠ»Π΅Π΄ΠΈΡΡ.
12.2. ΠΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²Π°Ρ ΠΏΠ°ΠΌΡΡΡ: ΡΡΠ½ΠΊΡΠΈΠΈ memXXX()
ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ ΠΏΠ°ΠΌΡΡΠΈ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ ΡΠ»ΡΠΆΠ±Ρ. ΠΡΠ΅ ΠΈΡ ΠΈΠΌΠ΅Π½Π° Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠ° '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() ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ val (ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΠΎΠ΅ ΠΊΠ°ΠΊ unsigned char) Π² ΠΏΠ΅ΡΠ²ΡΠ΅ count Π±Π°ΠΉΡΠΎΠ² Π±ΡΡΠ΅ΡΠ° buf. ΠΠ½Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Π° Π΄Π»Ρ ΠΎΠ±Π½ΡΠ»Π΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠΎΠ² Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ:
void *p = malloc(count);
if (p != NULL)
memset(p, 0, count);
ΠΠ΄Π½Π°ΠΊΠΎ memset() ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Ρ Π»ΡΠ±ΠΎΠΉ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ, Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ: buf.
12.2.2. ΠΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ: memcpy(), memmove() ΠΈ memccpy()
Π’ΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠΎΠΏΠΈΡΡΡΡ ΠΎΠ΄ΠΈΠ½ Π±Π»ΠΎΠΊ ΠΏΠ°ΠΌΡΡΠΈ Π² Π΄ΡΡΠ³ΠΎΠΉ. ΠΠ΅ΡΠ²ΡΠ΅ Π΄Π²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΠΈΡ ΡΡ ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ ΠΏΠ°ΠΌΡΡΠΈ; ΡΡΠ΅ΡΡΡ ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ ΠΏΠ°ΠΌΡΡΡ, Π½ΠΎ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ Π²ΡΡΡΠ΅ΡΠ΅ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ.
void *memcpy(void *dest, const void *src, size_t count)
ΠΡΠΎ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ. ΠΠ½Π° ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ count Π±Π°ΠΉΡΠΎΠ² ΠΈΠ· src Π² dest. ΠΠ½Π° Π½Π΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΠΈΠ΅ΡΡ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ. Π€ΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ dest.
void *memmove(void *dest, const void *src, size_t count)
ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ memcpy(), ΠΎΠ½Π° ΡΠ°ΠΊΠΆΠ΅ ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ count Π±Π°ΠΉΡΠΎΠ² ΠΈΠ· src Π² dest. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΎΠ½Π° ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΠΈΠ΅ΡΡ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ. Π€ΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ dest.
void *memccpy(void *dest, const void *src, int val, size_t count)
ΠΡΠ° ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ Π±Π°ΠΉΡΡ ΠΈΠ· src Π² dest, ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡ Π»ΠΈΠ±ΠΎ ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ val Π² dest, Π»ΠΈΠ±ΠΎ ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ count Π±Π°ΠΉΡΠΎΠ². ΠΡΠ»ΠΈ ΠΎΠ½Π° Π½Π°Ρ ΠΎΠ΄ΠΈΡ val, ΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² dest ΡΡΠ°Π·Ρ Π·Π° val. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ NULL.
Π’Π΅ΠΏΠ΅ΡΡ, Π² ΡΠ΅ΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΠ΅ΠΉΡΡ ΠΏΠ°ΠΌΡΡΡΡ? Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΈΡ. 12.1.
Π ΠΈΡ. 12.1. ΠΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΠΈΠ΅ΡΡ ΠΊΠΎΠΏΠΈΠΈ
Π¦Π΅Π»ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΡΡΡΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° struct xyz ΠΎΡ data[0] Π΄ΠΎ data[3] Π² ΡΡΠ°ΡΡΠΎΠΊ ΠΎΡ data[3] Π΄ΠΎ data[6]. ΠΠ΄Π΅ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ data[3], ΠΏΠΎΠ±Π°ΠΉΡΠΎΠ²ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΈΠ· data[0] Π·Π°ΡΡΠ΅Ρ data[3] Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ Π² data[6]! (ΠΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΏΠ°ΠΌΡΡΠΈ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΡΠ°Π·ΡΡΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΠΈΠ΅ΡΡ Π΄Π°Π½Π½ΡΠ΅.)
Π€ΡΠ½ΠΊΡΠΈΡ memcpy() Π±ΡΠ»Π° ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Π² System V API Π΄Π»Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±Π»ΠΎΠΊΠΎΠ² ΠΏΠ°ΠΌΡΡΠΈ; Π΅Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΠΈΡ ΡΡ Π±Π»ΠΎΠΊΠΎΠ² ΠΏΠ°ΠΌΡΡΠΈ Π½Π΅ Π±ΡΠ»Π° ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΠ΅ΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ. ΠΠ»Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ° Π‘ 1989 Π³. ΠΊΠΎΠΌΠΈΡΠ΅Ρ ΠΏΠΎΡΡΠ²ΡΡΠ²ΠΎΠ²Π°Π», ΡΡΠΎ ΡΡΠΎ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ΠΈ ΠΏΡΠΈΠ΄ΡΠΌΠ°Π»ΠΈ memmove(). ΠΠ»Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ memcpy() Π±ΡΠ»Π° ΠΎΡΡΠ°Π²Π»Π΅Π½Π°, ΠΏΡΠΈΡΠ΅ΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΠ΅ΠΉΡΡ ΠΏΠ°ΠΌΡΡΠΈ Π±ΡΠ»ΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠ΅Π½ΠΎ ΠΊΠ°ΠΊ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅, Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡΠ΅ΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ, Π±ΡΠ»Π° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π° memmove().
ΠΠ°ΠΊΡΡ ΠΈΠ· Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΊΠΎΠ΄Π΅? ΠΠ»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ Π·Π½Π°Π΅Ρ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ Π΅ΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ, ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ memmove(). Π’Π°ΠΊΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Π²Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΠ΅, ΡΡΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΠΈΠΌΠΈΡΡ ΠΎΠ±Π»Π°ΡΡΡΠΌΠΈ. ΠΠ»Ρ ΠΊΠΎΠ΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ Β«Π·Π½Π°Π΅ΡΒ», ΡΡΠΎ Π΄Π²Π΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π½Π΅ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΡΡ, ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ memcpy().
ΠΠ°ΠΊ Π΄Π»Ρ memcpy(), ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ memmove() (ΠΊΠ°ΠΊ ΠΈ Π΄Π»Ρ strcpy()) Π±ΡΡΠ΅Ρ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ, Π° ΠΈΡΡΠΎΡΠ½ΠΈΠΊ β Π²ΡΠΎΡΡΠΌ. Π§ΡΠΎΠ±Ρ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ ΡΡΠΎ, ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΡΡΠ΄ΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΡ ΠΆΠ΅ ΡΠ°ΠΌΡΠΉ, ΠΊΠ°ΠΊ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ΅ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ:
dest = src;
(Π‘ΠΏΡΠ°Π²ΠΎΡΠ½ΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΠΏΡΠΎΡΠΎΡΠΈΠΏ Π² Π²ΠΈΠ΄Π΅ 'void *memcpy(void *buf1, void *buf2, size_t n)' ΠΈ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΡΠ΅ΠΊΡΡ ΠΎΠ±ΡΡΡΠ½ΠΈΡ, ΡΡΠΎ Π΅ΡΡΡ ΡΡΠΎ. Π ΡΡΠ°ΡΡΡΡ, ΡΠΏΡΠ°Π²ΠΎΡΠ½Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ° GNU/Linux ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π±ΠΎΠ»Π΅Π΅ ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΡΠ΅ ΠΈΠΌΠ΅Π½Π°.)
12.2.3. Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΎΠ² ΠΏΠ°ΠΌΡΡΠΈ: memcmp()
Π€ΡΠ½ΠΊΡΠΈΡ memcmp() ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅Ρ count Π±Π°ΠΉΡΠΎΠ² ΠΈΠ· Π΄Π²ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΡ Π±ΡΡΠ΅ΡΠΎΠ² Π΄Π°Π½Π½ΡΡ . ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ strcmp(): ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅, Π½ΡΠ»Π΅Π²ΠΎΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅, Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ²ΡΠΉ Π±ΡΡΠ΅Ρ ΠΌΠ΅Π½ΡΡΠ΅, ΡΠ°Π²Π΅Π½ ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠΎΡΠΎΠ³ΠΎ.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°ΡΡΡΡ: Β«ΠΠΎΡΠ΅ΠΌΡ Π±Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ strcmp()?Β» Π Π°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ Π² ΡΠΎΠΌ, ΡΡΠΎ memcmp() Π½Π΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½ΡΠ»Π΅Π²ΡΠ΅ Π±Π°ΠΉΡΡ (Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠΉ ΡΡΡΠΎΠΊΡ '\0'.) Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, memcmp() ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΡΠ°Π²Π½ΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠ΅ Π΄Π²ΠΎΠΈΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅.
ΠΡΡΠ³ΠΈΠΌ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎΠΌ memcmp() ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΎΠ½Π° Π±ΡΡΡΡΠ΅Π΅ ΡΠΈΠΏΠΈΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° C:
/* 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;
}
Π‘ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡΠ° Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Β«Π±Π»ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈΒ», ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ, ΠΈΠ»ΠΈ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π΅Π΄ΠΈΠ½ΠΈΡ, ΠΏΡΠ΅Π²ΡΡΠ°ΡΡΠΈΡ Π±Π°ΠΉΡΡ. (ΠΡΠ° ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΊΠΎΠ²Π°ΡΠ½Π°, ΠΈ Π»ΡΡΡΠ΅ ΠΎΡΡΠ°Π²ΠΈΡΡ Π΅Π΅ Π°Π²ΡΠΎΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.)