Π§Ρ‚ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ запись char st 8

РусскиС Π‘Π»ΠΎΠ³ΠΈ

Π“Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ char *, char **, char a [], char * a []

1. ΠŸΡ€ΠΈΡ€ΠΎΠ΄Π° массива

2. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ являСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Но Π΅Π³ΠΎ Π±Π»ΠΎΠΊ памяти Ρ…Ρ€Π°Π½ΠΈΡ‚ адрСс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ мСстополоТСния. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ адрСс Ρ‚Π°ΠΊΠΆΠ΅ являСтся Ρ†Π΅Π»Ρ‹ΠΌ числом, Π½Π° 32-Π±ΠΈΡ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π²Π΅Π½ 32 Π±ΠΈΡ‚Π°ΠΌ.

3. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ указатСля

НСзависимо ΠΎΡ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… пСрСмСнная-ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ всСгда являСтся Ρ†Π΅Π»Ρ‹ΠΌ числом ΠΈΠ·-Π·Π° адрСса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½Π° содСрТит.

4. Массив символов

Π‘ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ массив, Π° элСмСнты Π² массивС ΡΠ²Π»ΡΡŽΡ‚ΡΡ символами. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π² этом Π΅Π³ΠΎ основноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° пСрСмСнная ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π½Π° языкС Π‘ΠΈ.

Когда компилятор встрСчаСт это ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΎΠ½ заполняСт hello \ 0 ΠΎΠ΄ΠΈΠ½ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта Π² массивС str.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² языкС C Π½Π΅Ρ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° строки, массив символов ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для прСдставлСния строки, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ адрСса Π΅Π΅ элСмСнтов ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΌΠΈ, Ρ‡Ρ‚ΠΎ достаточно.

Π―Π·Ρ‹ΠΊ C прСдусматриваСт, Ρ‡Ρ‚ΠΎ массив прСдставляСт ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ адрСс ячСйки памяти, Π³Π΄Π΅ располоТСн массив, Π° Ρ‚Π°ΠΊΠΆΠ΅ являСтся адрСсом str [0], Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ str = & str [0];

К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅

Π—Π°Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ адрСс для Π²Ρ‹Π²ΠΎΠ΄Π° строки.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΡŽΡ‡, ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ строковой константы Π² языкС Π‘ΠΈ Π½Π° самом Π΄Π΅Π»Π΅ являСтся адрСсом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠ½ΠΎΠ³ΠΈΠΌ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌ Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ.

НапримСр:

ΠŸΠΎΡ‡Π΅ΠΌΡƒ строка ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ указатСля.

Π Π°Π·Π²Π΅ это Π½Π΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ?

Π­Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡, упомянутый Π²Ρ‹ΡˆΠ΅.

На языкС Π‘ΠΈ компилятор Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒ адрСса строковым константам. Если Β«ΠšΠΈΡ‚Π°ΠΉΒ», ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² памяти ΠΊΠ°ΠΊ 0x3000 0x3001 0x3002 0x3003 0x3004 0x3005.

s = «ΠšΠΈΡ‚Π°ΠΉ», Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ сознаниС, Π΄Π°, адрСс.

ЀактичСски, Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ s = «ΠšΠΈΡ‚Π°ΠΉ» = 0x3000;

Π­Ρ‚ΠΎ письмо каТСтся Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΌ.

Π Π°Π·Π±Π΅Ρ€ΠΈΡΡŒ с этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ.

Π—Π°Ρ‚Π΅ΠΌ% s, Π΅Π³ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π° самом Π΄Π΅Π»Π΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π²Ρ‹Π²ΠΎΠ΄Π΅ строки Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ адрСс строки, printf («% s», s); фактичСски Π΅ΠΌΡƒ пСрСдаСтся адрСс строки, сохранСнной s.

Π’Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ s = 0x00422020, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ являСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ адрСсом «ΠΏΡ€ΠΈΠ²Π΅Ρ‚»

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, printf («% s», 0x00422020); Ρ‚Π°ΠΊΠΆΠ΅ эквивалСнтСн.

Массив символов:

Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, str = & str [0] Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π²Π½ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ адрСсу Β«helloΒ».

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ printf («% s», str); ΠΏΠΎ сути, это printf («% s», адрСс);

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ строки Π² языкС Π‘ΠΈ осущСствляСтся Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ адрСс Π΅Π΅ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰Π΅Π³ΠΎ устройства Π² памяти, Ρ‡Ρ‚ΠΎ являСтся основной ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ строки.

4.char * ΠΈ char a []

Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, a прСдставляСт ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ адрСс строки, Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ s Ρ‚Π°ΠΊΠΆΠ΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ адрСс строки (фактичСски ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ адрСс), Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ адрСс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ символа.Π”Π°Π½Π½Ρ‹Π΅ Π² этой Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ адрСса ΡΠ²Π»ΡΡŽΡ‚ΡΡ символом.

Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ согласуСтся с символом, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ s.

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, s = a;

На языкС C имя массива ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ для прСдставлСния адрСса, Π½ΠΎ Π΅Π³ΠΎ нСльзя ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΈ массива. Π­Ρ‚ΠΎ постоянный Ρ‚ΠΈΠΏ, поэтому Π΅Π³ΠΎ нСльзя ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, это Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Π‘ΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ косвСнный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ *, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ содСрТимоС, ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ индСкса массива [], ΠΈ имя массива Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с *, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ прСдставляСт адрСс.

Π’Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ

5. БущСствСнная Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ char * ΠΈ char a []:

ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ char * s это пСрСмСнная указатСля, которая Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ всСго Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π±Π°ΠΉΡ‚Π°, 32 Π±ΠΈΡ‚Π° ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для хранСния адрСса.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, это 4. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ выдСляСт 4 Π±Π°ΠΉΡ‚Π° 32-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ пространства, ΠΈ адрСс Π±ΡƒΠ΄Π΅Ρ‚ сохранСн Π² этом пространствС.

Π­Ρ‚ΠΎ прСдставляСт адрСс, хранящийся Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Ρ… s.

Π­Ρ‚ΠΎ прСдставляСт адрСс Π±Π»ΠΎΠΊΠ° памяти, Π³Π΄Π΅ находится сама пСрСмСнная, Π½Π΅ ΠΏΡƒΡ‚Π°ΠΉΡ‚Π΅ Π΅Π³ΠΎ.

ΠŸΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ char * ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ эффСкта char a [], являСтся Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ строки, адрСс. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Ссли Π²Ρ‹ Π΄Π°Π΄ΠΈΡ‚Π΅ Π²Π°ΠΌ строковый адрСс, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎ своСму ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ, Π½ΠΎ основныС свойства char * ΠΈ char a [] Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹.

6.char ** ΠΈ char * a []

Из этого прСдлоТСния Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ элСмСнты Π² массивС ΡΠ²Π»ΡΡŽΡ‚ΡΡ строками, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠ΅ sizeof (a)? НСкоторыС люди Π΄ΡƒΠΌΠ°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‰Π΅Π΅ количСство Π±Π°ΠΉΡ‚ΠΎΠ² Π² памяти составляСт 5 слов 6 + 7 + 8 + 7 = 28;

Но на самом дСлС sizeof (a) = 16;

ВзглянитС Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ элСмСнта Π² массивС хранят Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ адрСса памяти, ΠΈ эти Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ адрСса ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ адрСса Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… строк, Π° Π½Π΅ сами строки.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ эти Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ адрСса Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ: ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ адрСсами пространства памяти, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ компилятором для Β«ΠšΠΈΡ‚Π°ΠΉΒ», «Ѐранцузский», «АмСрика» ΠΈ «НСмСцкий», поэтому Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ адрСса Π½Π΅ связаны ΠΌΠ΅ΠΆΠ΄Ρƒ собой.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ 0012FF38 0012FF3C 0012FF40 0012FF44, эти Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ адрСсами, Π³Π΄Π΅ располоТСна Π΅Π΄ΠΈΠ½ΠΈΡ†Π° элСмСнта, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ адрСс отличаСтся Π½Π° Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π±Π°ΠΉΡ‚Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт являСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ-ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰Π΅ΠΉ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π±Π°ΠΉΡ‚Π°.

Char ** являСтся Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ, Π° s Ρ…Ρ€Π°Π½ΠΈΡ‚ адрСс ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ указатСля char *. Π’Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ здСсь ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Ρ‚ΡŒΡΡ. ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Π½Ρ‹Ρ… ошибкам Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ указатСля.

НапримСр:

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ a s, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ имя массива a прСдставляСт ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ адрСс Π±Π»ΠΎΠΊΠ° памяти элСмСнта массива, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ a = & a [0] = 0012FF38;

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ с

Но слСдуСт ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ a = s Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано. Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, a являСтся константой.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Π½ΡƒΡŽ ошибкам Ρ‚ΠΎΡ‡ΠΊΡƒ:

ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ s это char **, Π° Ρ‚ΠΈΠΏ «hello world» это char *

Π₯отя всС ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ адрСсами, ΠΎΠ½ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, поэтому ΠΈΡ… нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Π§Ρ‚ΠΎ Ссли Ρ‚Π°ΠΊ:

Π­Ρ‚ΠΎ каТСтся Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΌ ΠΈ Π½Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с компиляциСй, Π½ΠΎ printf («% s», * s) Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ сбоСм.
Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΠ·ΡƒΡ‡ΠΈΠΌ это ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ.

Когда printf («% s», * s) ;, сначала Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ адрСс, сохранСнный s, Π° Π·Π°Ρ‚Π΅ΠΌ Π½Π°ΠΉΡ‚ΠΈ адрСс char * Π² этом адрСсС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся * s;

АдрСс 0x003001 Β«hello worldΒ» сохраняСтся Π² Π±Π»ΠΎΠΊΠ΅ памяти, Π³Π΄Π΅ располоТСн 0x1000, * s = 0x003001;

Π‘Π½Π°Ρ‡Π°Π»Π° Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ 0x1000, Π° Π·Π°Ρ‚Π΅ΠΌ 0x003001;

Π’ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ s хранится нСдопустимый случайный нСдоступный адрСс. Никто Π½Π΅ Π·Π½Π°Π΅Ρ‚, ΠΊΡƒΠ΄Π° ΠΎΠ½ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΈ опСрация * s Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ сбоСм.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ символ **, адрСс памяти Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π΅ΠΌΡƒ Π²Ρ‹Π΄Π΅Π»Π΅Π½.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, s назначаСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ адрСс, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ s = 0x412f;
Π—Π°Ρ‚Π΅ΠΌ сохранитС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«hello worldΒ» Π² ячСйкС памяти, Π³Π΄Π΅ находится 0x412f.

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

НаконСц, Ρ€Π°Π·ΠΌΠ΅Ρ€ sizoof (указатСля) зависит ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°.Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, объСм памяти, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡ‹ΠΉ 32-разрядной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой, Ρ€Π°Π²Π΅Π½ 4, Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ 64-разрядного указатСля ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Ρ€Π°Π²Π΅Π½ 8.

Printf («% s», * s) Π² ΠΌΠΎΠ΅ΠΉ Ubuntu, Π±Π΅Π· сбоСв.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π£Ρ€ΠΎΠΊ β„–35. Π‘ΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… char

Обновл. 11 БСн 2021 |

Π₯ΠΎΡ‚ΡŒ Ρ‚ΠΈΠΏ char ΠΈ относится ΠΊ цСлочислСнным Ρ‚ΠΈΠΏΠ°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… (ΠΈ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, слСдуСт всСм ΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ), Ρ€Π°Π±ΠΎΡ‚Π° с char нСсколько отличаСтся ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ цСлочислСнными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ.

Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… char

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Ρ‚ΠΈΠΏΠ° char Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 1 Π±Π°ΠΉΡ‚. Однако вмСсто ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΈ значСния Ρ‚ΠΈΠΏΠ° char Π² Ρ†Π΅Π»ΠΎΠ΅ число, ΠΎΠ½ΠΎ интСрпрСтируСтся ΠΊΠ°ΠΊ ASCII-символ.

ASCII (сокр. ΠΎΡ‚ Β«American Standard Code for Information InterchangeΒ») β€” это амСриканский стандартный ΠΊΠΎΠ΄ для ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт способ прСдставлСния символов английского языка (+ нСсколько Π΄Ρ€ΡƒΠ³ΠΈΡ…) Π² Π²ΠΈΠ΄Π΅ чисСл ΠΎΡ‚ 0 Π΄ΠΎ 127. НапримСр: ΠΊΠΎΠ΄ Π±ΡƒΠΊΠ²Ρ‹ ‘Π°’ β€” 97, ΠΊΠΎΠ΄ Π±ΡƒΠΊΠ²Ρ‹ ‘b’ β€” 98. Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ всСгда ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ.

Π’Π°Π±Π»ΠΈΡ†Π° ASCII-символов:

Код Бимвол Код Бимвол Код Бимвол Код Бимвол
0NUL (null)32(space)64@96`
1SOH (start of header)33!65A97a
2STX (start of text)34”66B98b
3ETX (end of text)35#67C99c
4EOT (end of transmission)36$68D100d
5ENQ (enquiry)37%69E101e
6ACK (acknowledge)38&70F102f
7BEL (bell)39’71G103g
8BS (backspace)40(72H104h
9HT (horizontal tab)41)73I105i
10LF (line feed/new line)42*74J106j
11VT (vertical tab)43+75K107k
12FF (form feed / new page)44,76L108l
13CR (carriage return)45β€”77M109m
14SO (shift out)46.78N110n
15SI (shift in)47/79O111o
16DLE (data link escape)48080P112p
17DC1 (data control 1)49181Q113q
18DC2 (data control 2)50282R114r
19DC3 (data control 3)51383S115s
20DC4 (data control 4)52484T116t
21NAK (negative acknowledge)53585U117u
22SYN (synchronous idle)54686V118v
23ETB (end of transmission block)55787W119w
24CAN (cancel)56888X120x
25EM (end of medium)57989Y121y
26SUB (substitute)58:90Z122z
27ESC (escape)59;91[123 <
28FS (file separator)6094^126
31US (unit separator)63?95_127DEL (delete)

Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ ΠΎΡ‚ 0 Π΄ΠΎ 31 Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для форматирования Π²Ρ‹Π²ΠΎΠ΄Π°. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠ· Π½ΠΈΡ… ΡƒΠΆΠ΅ устарСли.

Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ ΠΎΡ‚ 32 Π΄ΠΎ 127 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Π²Ρ‹Π²ΠΎΠ΄Π°. Π­Ρ‚ΠΎ Π±ΡƒΠΊΠ²Ρ‹, Ρ†ΠΈΡ„Ρ€Ρ‹, Π·Π½Π°ΠΊΠΈ прСпинания, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для отобраТСния тСкста (Π½Π° английском языкС).

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²Π° стСйтмСнта Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ (ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ° char Ρ†Π΅Π»ΠΎΠ΅ число 97 ):

Π‘ΡƒΠ΄ΡŒΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ ΠΏΡ€ΠΈ использовании фактичСских чисСл с числами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для прСдставлСния символов (ΠΈΠ· ASCII-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹). Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²Π° стСйтмСнта Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π½Π΅ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅:

Π’Ρ‹Π²ΠΎΠ΄ символов

ΠŸΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° char, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ cout Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ символы вмСсто Ρ†ΠΈΡ„Ρ€:

Π’Π°ΠΊΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ Ρ‚ΠΈΠΏΠ° char Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ:

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ static_cast

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ вывСсти символы Π² Π²ΠΈΠ΄Π΅ Ρ†ΠΈΡ„Ρ€, Π° Π½Π΅ Π² Π²ΠΈΠ΄Π΅ Π±ΡƒΠΊΠ², Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ cout Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° char Π² Π²ΠΈΠ΄Π΅ цСлочислСнных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. НС ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ способ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ β€” ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° int ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° char ΠΈ вывСсти Π΅Ρ‘:

Π›ΡƒΡ‡ΡˆΠΈΠΌ способом являСтся конвСртация ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° static_cast.

Бинтаксис static_cast выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° static_cast для ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° char Π² Ρ‚ΠΈΠΏ int:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Π’Π°ΠΊΠΆΠ΅ Π² static_cast Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρƒ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ числа, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ слишком большиС ΠΈΠ»ΠΈ слишком малСнькиС для ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎ static_cast ΠΌΡ‹ Π΅Ρ‰Π΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ ΡƒΡ€ΠΎΠΊΠ΅.

Π’Π²ΠΎΠ΄ символов

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° просит ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ввСсти символ. Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½Π° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ этот символ ΠΈ Π΅Π³ΠΎ ASCII-ΠΊΠΎΠ΄:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Input a keyboard character: q
q has ASCII code 113

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π΄Π°ΠΆΠ΅ Ссли cin ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ввСсти нСсколько символов, пСрСмСнная ch Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ (ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ ΠΈ помСщаСтся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ). ΠžΡΡ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° останСтся Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌ Π±ΡƒΡ„Π΅Ρ€Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ cin, ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ доступна для использования ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌ cin.

Рассмотрим это всё Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Input a keyboard character: abcd
a has ASCII code 97
b has ASCII code 98

Π Π°Π·ΠΌΠ΅Ρ€, Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΈ Π·Π½Π°ΠΊ Ρ‚ΠΈΠΏΠ° сhar

Π’ языкС Π‘++ для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° char всСгда выдСляСтся 1 Π±Π°ΠΉΡ‚. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, char ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ signed, Ρ‚Π°ΠΊ ΠΈ unsigned (хотя ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ signed). Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ char для хранСния ASCII-символов, Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π·Π½Π°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ signed ΠΈ unsigned ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ значСния ΠΎΡ‚ 0 Π΄ΠΎ 127).

Π£ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ символы

Π’ языкС C++ Π΅ΡΡ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ символы (ΠΈΠ»ΠΈ Β«escape-ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈΒ»). Они Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с бэкслСша ( \ ), Π° Π·Π°Ρ‚Π΅ΠΌ слСдуСт опрСдСлСнная Π±ΡƒΠΊΠ²Π° ΠΈΠ»ΠΈ Ρ†ΠΈΡ„Ρ€Π°.

First line
Second line

First part Second part

Π’Π°Π±Π»ΠΈΡ†Π° всСх ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… символов Π² языкС C++:

НазваниС Π‘ΠΈΠΌΠ²ΠΎΠ» Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ (alert)\aΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ (Π·Π²ΡƒΠΊΠΎΠ²ΠΎΠΉ сигнал)
Backspace\bΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ курсора Π½Π° ΠΎΠ΄Π½Ρƒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π½Π°Π·Π°Π΄
formfeed\fΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ курсора ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ логичСской страницС
Π‘ΠΈΠΌΠ²ΠΎΠ» Π½ΠΎΠ²ΠΎΠΉ строки (newline)\nΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ курсора Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ строку
Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ (carriage return)\rΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ курсора Π² Π½Π°Ρ‡Π°Π»ΠΎ строки
Π“ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚Π°Π± (horizontal tab)\tВставка Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ TAB
Π’Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚Π°Π± (vertical tab)\vВставка Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ TAB
ΠžΠ΄ΠΈΠ½Π°Ρ€Π½Π°Ρ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°\’Вставка ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½ΠΎΠΉ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ (ΠΈΠ»ΠΈ апострофа)
Двойная ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°\”Вставка Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ
Π‘ΡΠΊΡΠ»Π΅Ρˆ\\Вставка ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ косой Ρ‡Π΅Ρ€Ρ‚Ρ‹ (бэкслСша)
Π’ΠΎΠΏΡ€ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π·Π½Π°ΠΊ\?Вставка Π·Π½Π°ΠΊΠ° вопроса
Π’ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½ΠΎΠ΅ число\(number)ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ числа ΠΈΠ· Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½ΠΎΠΉ систСмы счислСния Π² Ρ‚ΠΈΠΏ char
ШСстнадцатСричноС число\x(number)ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ числа ΠΈΠ· ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΉ систСмы счислСния Π² Ρ‚ΠΈΠΏ char

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² ΠΊΠΎΠ΄Π΅:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

«This is quoted text»
This string contains a single backslash \
6F in hex is char ‘o’

Π§Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ: β€˜\n’ ΠΈΠ»ΠΈ std::endl?

ΠŸΡ€ΠΈ использовании std::cout, Π΄Π°Π½Π½Ρ‹Π΅ для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π² Π±ΡƒΡ„Π΅Ρ€, Ρ‚.Π΅. std::cout ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ сразу ΠΆΠ΅ Π½Π° Π²Ρ‹Π²ΠΎΠ΄. ВмСсто этого ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… ΠΏΡ€ΠΈ сСбС Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя (Π² цСлях ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ).

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ \n Π²ΠΎ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹: wchar_t, char16_t ΠΈ char32_t

Π’ΠΈΠΏ wchar_t слСдуСт ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ практичСски Π²ΠΎ всСх случаях (ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚Π΅Ρ…, ΠΊΠΎΠ³Π΄Π° происходит взаимодСйствиС с Windows API).

Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ стандарт ASCII ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ†Π΅Π»Ρ‹Π΅ числа для прСдставлСния символов английского языка, Ρ‚Π°ΠΊ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ†Π΅Π»Ρ‹Π΅ числа для прСдставлСния символов Π΄Ρ€ΡƒΠ³ΠΈΡ… языков. НаиболСС извСстный стандарт (послС ASCII) β€” Unicode, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ Π² запасС Π±ΠΎΠ»Π΅Π΅ 110 000 Ρ†Π΅Π»Ρ‹Ρ… чисСл для прСдставлСния символов ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… языков.

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ Unicode:

UTF-32 β€” Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ 32 Π±ΠΈΡ‚Π° для прСдставлСния символа.

UTF-16 β€” Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ 16 Π±ΠΈΡ‚ для прСдставлСния символа.

UTF-8 β€” Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ 8 Π±ΠΈΡ‚ для прСдставлСния символа.

Π’ΠΈΠΏΡ‹ char16_t ΠΈ char32_t Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² C++11 для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ 16-Π±ΠΈΡ‚Π½Ρ‹Ρ… ΠΈ 32-Π±ΠΈΡ‚Π½Ρ‹Ρ… символов Unicode (8-Π±ΠΈΡ‚Π½Ρ‹Π΅ символы ΠΈ Ρ‚Π°ΠΊ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΈΠΏΠΎΠΌ char).

Π’ Ρ‡Ρ‘ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌΠΈ ΠΈ Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌΠΈ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ ΠΏΡ€ΠΈ использовании с символами?

ВСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ находится Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…, называСтся строкой (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, «Hello, world!» ). Π‘Ρ‚Ρ€ΠΎΠΊΠ° (Ρ‚ΠΈΠΏ string) β€” это Π½Π°Π±ΠΎΡ€ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… символов.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ Ρ‚ΠΈΠΏΠ° string Π² ΠΊΠΎΠ΄Π΅:

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎ Ρ‚ΠΈΠΏΠ΅ string ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ ΡƒΡ€ΠΎΠΊΠ΅.

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Π² ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… сСтях:

Π£Ρ€ΠΎΠΊ β„–34. ЛогичСский Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… bool

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π²: 12

>>Π’ΠΈΠΏ wchar_t слСдуСт ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ практичСски Π²ΠΎ всСх случаях
Π’ΠΎΡ‚ Π·Π° Ρ‚Π°ΠΊΠΎΠΉ совСт Π°Π²Ρ‚ΠΎΡ€Π° оригинала… Π­Ρ‚ΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½, ΠΏΠΎΡ‡Π΅ΠΌΡƒ софт сдСланный Π½Π° ΠΎΠ΄Π½ΠΎΠΌ языкС ΠΊΡ€Π°ΡˆΠΈΡ‚ΡΡ Π½Π° ОБ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ языком β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ японская ΠΈΠ³Ρ€Π° Π½Π° амСриканской Π²ΠΈΠ½Π΄Π΅.. Π”Π° ΠΈ собствСнно Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ английский софт Π½Π° русской Π²ΠΈΠ½Π΄Π΅.
ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π»ΠΈΠ±ΠΎ ΠΎΠ½ΠΈ Π΄ΡƒΠΌΠ°ΡŽΡ‚ Ρ‡Ρ‚ΠΎ ΠΊΡ€ΠΎΠΌΠ΅ английского Π½ΠΈΠΊΠ°ΠΊΠΈΡ… языков Π½Π΅Ρ‚ ΠΈ ΡŽΠ·Π°ΡŽΡ‚ char, Π»ΠΈΠ±ΠΎ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ Π²Ρ‚ΡƒΠ»ΠΈΡ‚ΡŒ всС Π² char8_t

Π’ Π³Π»Π°Π²Π΅ β„–30 «Π Π°Π·ΠΌΠ΅Ρ€ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…» Π±Ρ‹Π»ΠΎ написано «Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ sizeof β€” это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· 3-Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² языкС C++, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся словом, Π° Π½Π΅ символом (Π΅Ρ‰Π΅ Π΅ΡΡ‚ΡŒ new ΠΈ delete)». А Π² этой Π³Π»Π°Π²Π΅ оказываСтся Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ static_cast

странно, Π½ΠΎ Π² с++ sizeof(‘a’) == sizeof(char), Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π² си β€” sizeof(‘a’) == sizeof(int). Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ …

Π’ Π‘ΠΈ подобная конструкция sizeof(‘a’) == sizeof(int) ΠΈΠΌΠ΅Π΅Ρ‚ мСсто ΠΈΠ·-Π·Π° Π΅Π³ΠΎ особСнностСй. АргумСнт ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ sizeof скорСС всСго рассматриваСтся ΠΊΠ°ΠΊ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (expression). А Π²ΠΎ всСх выраТСниях Π² Π‘ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ мСсто ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ Ρ‚ΠΈΠΏΡƒ int, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ мСньший ΠΏΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ Ρ‚ΠΈΠΏ. Π§Ρ‚ΠΎ ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ мСсто Π² Π΄Π°Π½Π½ΠΎΠΌ случаС. На Π΄Π΅Π»Π΅ ΠΆΠ΅ (насколько я знаю) Π² Π‘ΠΈ символы Ρ‚ΠΎΠΆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π² ΠΎΠ΄ΠΈΠ½ Π±Π°ΠΉΡ‚. Π’Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ Ρ‚ΠΈΠΏ char Ρ‚Π°ΠΊ ΠΈ вводился, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π½Ρ‹ΠΌ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π±Π°ΠΉΡ‚Ρƒ.

ΠŸΡ€ΠΈΠ²Π΅Ρ‚!
Π’ΠΎΡ‚ с этим Π½Π΅ понятно Π½ΠΈΡ‡Π΅Π³ΠΎ:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Π² языкС C

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Π² C, ΠΊΠ°ΠΊ ΠΈ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ языков программирования высокого уровня Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, входящий Π² систСму Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² языка. Π’Π°ΠΊ ΠΊΠ°ΠΊ язык C ΠΏΠΎ своСму ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠΆΠ΄Π΅Π½ΠΈΡŽ являСтся языком систСмного программирования, Ρ‚ΠΎ строковый Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Π² C ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΎΠ²ΠΎΠΉ отсутствуСт, Π° Π² качСствС строк Π² Π‘ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ массивы символов.

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΠΈ слоТилось Π΄Π²Π° прСдставлСния Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° строк:

Π€ΠΎΡ€ΠΌΠ°Ρ‚ ANSI устанавливаСт, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² строкС являСтся Π΅Π΅ Π΄Π»ΠΈΠ½Π°, Π° Π·Π°Ρ‚Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ сами символы строки. НапримСр, прСдставлСниС строки «ΠœΠΎΡ строка!» Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:

11 ‘М’ ‘ΠΎ’ ‘я’ ‘ ‘ ‘с’ ‘Ρ‚’ ‘Ρ€’ ‘ΠΎ’ ‘ΠΊ’ ‘Π°’ ‘!’
Π’ строках с Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠΌ Π½ΡƒΠ»Π΅ΠΌ, Π·Π½Π°Ρ‡Π°Ρ‰ΠΈΠ΅ символы строки ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ с ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, Π° ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ строки являСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ноль. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ рассмотрСнной Ρ€Π°Π½Π΅Π΅ строки Π² этом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:

‘М’ ‘ΠΎ’ ‘я’ ‘ ‘ ‘с’ ‘Ρ‚’ ‘Ρ€’ ‘ΠΎ’ ‘ΠΊ’ ‘Π°’ ‘!’ 0

ОбъявлСниС строк Π² C

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ посрСдством массивов символов. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ объявлСниС ASCII строки ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

char имя[длина];
ОбъявлСниС строки Π² Π‘ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ синтаксис, Ρ‡Ρ‚ΠΎ ΠΈ объявлСниС ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ символьного массива. Π”Π»ΠΈΠ½Π° строки Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой цСлочислСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (Π² стандартС C89 – константа, Π² стандартС C99 ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ). Π”Π»ΠΈΠ½Π° строки указываСтся с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа Π½Π° Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π΅Π³ΠΎ нуля, поэтому максимальноС количСство Π·Π½Π°Ρ‡Π°Ρ‰ΠΈΡ… символов Π² строкС Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ мСньшС Π΅Π΅ Π΄Π»ΠΈΠ½Ρ‹. НапримСр, строка ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ максимально Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΡŒ символов, Ссли объявлСна ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:
char str[21]; Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ строки Π² Π‘ осущСствляСтся ΠΏΡ€ΠΈ Π΅Π΅ объявлСнии, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:
char str[Π΄Π»ΠΈΠ½Π°] = строковый Π»ΠΈΡ‚Π΅Ρ€Π°Π»;

Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹ΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Π» – строка ASCII символов Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ объявлСния строк с ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ:

char str1[20] = «Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: «, str2[20] = «»;

const char message[] = «Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ± ошибкС!»;

Π Π°Π±ΠΎΡ‚Π° со строками Π² Π‘

Π’Π°ΠΊ ΠΊΠ°ΠΊ строки Π½Π° языкС Π‘ ΡΠ²Π»ΡΡŽΡ‚ΡΡ массивами символов, Ρ‚ΠΎ ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ символу строки ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΏΠΎ Π΅Π³ΠΎ индСксу. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ синтаксис обращСния ΠΊ элСмСнту массива, поэтому ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ Π² строкС ΠΈΠΌΠ΅Π΅Ρ‚ индСкс ноль. НапримСр, Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² строкС str осущСствляСтся Π·Π°ΠΌΠ΅Π½Π° всСх символов ‘a’ Π½Π° символы ‘A’ ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ строк Π² Π‘

ОбъявлСниС массивов строк Π² языкС Π‘ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы символов, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:
char имя[количСство][Π΄Π»ΠΈΠ½Π°];

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ указываСтся количСство строк Π² массивС, Π° Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ – максимальная (с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π΅Π³ΠΎ нуля) Π΄Π»ΠΈΠ½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки. НапримСр, объявлСниС массива ΠΈΠ· пяти строк максимальной Π΄Π»ΠΈΠ½ΠΎΠΉ 30 Π·Π½Π°Ρ‡Π°Ρ‰ΠΈΡ… символов Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΈΠ΄:

Число строковых Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ мСньшС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ количСству строк Π² массивС. Если число строковых Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ² мСньшС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива, Ρ‚ΠΎ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ пустыми строками. Π”Π»ΠΈΠ½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ строкового Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ строго мСньшС значСния Π΄Π»ΠΈΠ½Ρ‹ строки (для записи Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π΅Π³ΠΎ нуля).

ΠŸΡ€ΠΈ объявлСнии массивов строк с ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ допускаСтся Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ количСство строк Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС, количСство строк Π² массивС Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ автоматичСски ΠΏΠΎ числу ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… строковых Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ².
НапримСр, массив ΠΈΠ· сСми строк:

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со строками Π² Π‘

ВсС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со строками, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Ρ‚Ρ€ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹:

Π’Π²ΠΎΠ΄ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ строк Π² Π‘

Для Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° строковой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° (printf ΠΈ scanf). Для этого Π² строкС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ ΠΈΠ»ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ строковой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ спСцификатор Ρ‚ΠΈΠΏΠ° %s. НапримСр, Π²Π²ΠΎΠ΄ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄ строковой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΈΠ΄:

char str[31] = «»;
printf(«Π’Π²Π΅Π΄ΠΈΡ‚Π΅ строку: «);
scanf(«%30s”,str);
printf(«Π’Ρ‹ Π²Π²Π΅Π»ΠΈ: %s”,str);

НСдостатком Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ scanf ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ строковых Π΄Π°Π½Π½Ρ‹Ρ… являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ символами раздСлитСлями Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ:

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ввСсти строку, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ нСсколько слов, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ ΠΈΠ»ΠΈ табуляциями. НапримСр, Ссли Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²Π΅Π΄Π΅Ρ‚ строку: «Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… слов», Ρ‚ΠΎ Π½Π° экранС Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ «Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅».
Для Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° строк Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ stdio.h содСрТатся спСциализированныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ gets ΠΈ puts.

Ѐункция gets ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для Π²Π²ΠΎΠ΄Π° строк ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ:
char * gets(char *buffer);

ΠœΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ gets катСгоричСски Π½Π΅ рСкомСндуСтся, Π²Π²ΠΈΠ΄Ρƒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π½Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρƒ строки, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ произвСсти ΠΊ ошибкам. ВмСсто Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция fgets с трСмя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ:

char * fgets(char * buffer, int size, FILE * stream);

Ѐункция puts ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для Π²Ρ‹Π²ΠΎΠ΄Π° строк ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ:
int puts(const char *string);

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°: Π²Π²ΠΎΠ΄ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ строки с использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ fgets ΠΈ puts Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΈΠ΄:

Помимо Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Π² ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ stdio.h ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Π² строки. Ѐункция Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° ΠΈΠ· строки ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ:

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹Π²ΠΎΠ΄Π° Π² строку ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ:

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ строк

Π’ Π‘ для прСобразования строк, содСрТащих числа, Π² числСнныС значСния Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ stdlib.h
прСдусмотрСн ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:
double atof(const char *string); // ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ строки Π² число Ρ‚ΠΈΠΏΠ° double
int atoi(const char *string); // ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ строки Π² число Ρ‚ΠΈΠΏΠ° int
long int atol(const char *string); // ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ строки Π² число Ρ‚ΠΈΠΏΠ° long int
long long int atoll(const char *string); // ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ строки Π² число Ρ‚ΠΈΠΏΠ° long long int

ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ прСдставлСниС вСщСствСнного числа Π² тСкстовой строкС Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ:

ПослС символов E, e указываСтся порядок числа. ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ прСдставлСниС Ρ†Π΅Π»ΠΎΠ³ΠΎ числа Π² тСкстовой строкС Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ:

Помимо ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ stdlib.h доступны Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ прСобразования строк Π² вСщСствСнныС числа:

АналогичныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ для прСобразования строк Π² цСлочислСнныС значСния:

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ прСобразования (числСнныС значСния Π² строки) Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ stdlib.h ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚, Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ Ρ€Π΅Π³Π»Π°ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ стандартом, ΠΈ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚. Для прСобразования числСнных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² строковыС Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sprintf ΠΈ snprintf.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° строк

Π’ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ string.h ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… дСйствий Π½Π°Π΄ строками.
Ѐункция вычислСния Π΄Π»ΠΈΠ½Ρ‹ строки:
size_t strlen(const char *string);

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ копирования строк:

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ сравнСния строк:

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ сравнСниС строк ΠΏΠΎ Π°Π»Ρ„Π°Π²ΠΈΡ‚Ρƒ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚:

ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ – Ссли string1 большС string2;
ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ – Ссли string1 мСньшС string2;
Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ – Ссли string1 совпадаСт с string2;

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ объСдинСния (ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ) строк:

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ поиска символа Π² строкС:

Ѐункция поиска строки Π² строкС:
char * strstr(const char *str, const char *substr);

Ѐункция поиска ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ символа Π² строкС ΠΈΠ· Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° символов:
size_t strcspn(const char *str, const char *charset);

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ поиска ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ символа Π² строкС Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰Π΅ΠΌΡƒ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ Π½Π°Π±ΠΎΡ€Ρƒ символов:
size_t strspn(const char *str, const char *charset);

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ поиска ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ символа Π² строкС ΠΈΠ· Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° символов:
char * strpbrk(const char *str, const char *charset);

Ѐункция поиска ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° Π² строкС:
char * strtok(char * restrict string, const char * restrict charset);

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *