<!DOCTYPE html>
<html class="client-nojs" lang="ru" dir="ltr"><head>
    <meta charset="UTF-8">
    <title>String.h</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="icon" type="image/png" href="./_res_/favicon.png">
    <link rel="canonical" href="https://ru.wikipedia.org/wiki/String.h"> <link href="./_mw_/skins.vector.styles.legacy.css" rel="stylesheet" type="text/css">
    <meta name="ResourceLoaderDynamicStyles" content="">
    <link href="./_mw_/ext.gadget.common-site.css" rel="stylesheet" type="text/css">
    <link href="./_mw_/ext.gadget.logo.css" rel="stylesheet" type="text/css">
    <link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
    <link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
    <link rel="stylesheet" type="text/css" href="./_res_/footer.css">
    <link rel="stylesheet" type="text/css" href="./_res_/vector.css">
  </head>

  <body class="skin-vector-legacy mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-String_h rootpage-String_h skin-vector action-view">
    <div id="content" class="mw-body" role="main">
      <a id="top"></a>
      <h1 id="firstHeading" class="firstHeading mw-first-heading">string.h</h1>
      <div id="bodyContent" class="vector-body">
        <div id="contentSub">
          <div id="mw-content-subtitle"></div>
        </div>
        <div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="ru" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="ru" dir="ltr"><style data-mw-deduplicate="TemplateStyles:r138740689">
/* start https://ru.wikipedia.org/ */


.mw-parser-output .ts-Боковая_навигационная_таблица-body{float:right;clear:right;width:23em;margin:0 0 1.0em 1.0em;background:var(--background-color-interactive-subtle,#f8f9fa);border:1px solid var(--border-color-base,#a2a9b1);color:inherit;padding:0.4em;border-spacing:0.2em;text-align:center;line-height:1.4em;font-size:90%}.mw-parser-output .ts-Боковая_навигационная_таблица-outerTitle{padding-bottom:0.2em;font-size:125%;line-height:1.15em;font-weight:bold}.mw-parser-output .ts-Боковая_навигационная_таблица-topImage{padding:0 0 0.4em}.mw-parser-output .ts-Боковая_навигационная_таблица-topImage-caption,.mw-parser-output .ts-Боковая_навигационная_таблица-image-caption{padding-top:0.2em;line-height:1.2em}.mw-parser-output .ts-Боковая_навигационная_таблица-preTitle{padding-top:0.4em}.mw-parser-output .ts-Боковая_навигационная_таблица-topImage-row+tr>.ts-Боковая_навигационная_таблица-preTitle{padding-top:0}.mw-parser-output .ts-Боковая_навигационная_таблица-image{padding:0.4em 0 0.4em}.mw-parser-output .ts-Боковая_навигационная_таблица-title{padding:0.2em 0.4em 0.2em;font-size:125%;line-height:1.15em;font-weight:bold;background:var(--ruwiki-background-color-blue200,#cfe3ff);color:inherit}.mw-parser-output .ts-Боковая_навигационная_таблица-above{padding:0.2em 0.4em 0.2em;font-weight:bold}.mw-parser-output .ts-Боковая_навигационная_таблица-below{padding:0.2em 0.4em 0.2em;font-weight:bold;background:var(--background-color-progressive-subtle,#eaf3ff);color:inherit}.mw-parser-output .ts-Боковая_навигационная_таблица-heading{padding:0.2em 0;font-weight:bold;background:var(--background-color-progressive-subtle,#eaf3ff);color:inherit}.mw-parser-output .ts-Боковая_навигационная_таблица-list{padding:0.2em 0}


/* end   https://ru.wikipedia.org/ */
</style>
<p><b>string.h</b>&nbsp;— <a href="%D0%97%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BE%D1%87%D0%BD%D1%8B%D0%B9_%D1%84%D0%B0%D0%B9%D0%BB" title="Заголовочный файл">заголовочный файл</a> <a href="%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D0%B0%D1%8F_%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%A1%D0%B8" title="Стандартная библиотека языка Си">стандартной библиотеки языка Си</a>, содержащий функции для работы с <a href="%D0%9D%D1%83%D0%BB%D1%8C-%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B0" title="Нуль-терминированная строка">нуль-терминированными строками</a> и памятью.
</p><p>Функции, объявленные в <code>string.h</code>, широко используются, так как являясь частью стандартной библиотеки, они гарантированно работают на всех платформах, поддерживающих Си. Кроме этого, строковые функции работают только с набором символов <a href="ASCII" title="ASCII">ASCII</a> или его совместимыми расширениями, такими как <a href="CP437" title="CP437">CP437</a>, <a href="ISO_8859-1" title="ISO 8859-1">ISO 8859-1</a> или <a href="Windows-1252" class="mw-redirect" title="Windows-1252">Windows-1252</a>; многобайтовые кодировки такие как <a href="UTF-8" title="UTF-8">UTF-8</a> будут работать, с отличием, что «длина» строки будет определяться как число байтов, а не число символов <a href="%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4" title="Юникод">Юникода</a>, которым они соответствуют. Несовместимые с ASCII строки обычно обрабатываются кодом описанным в <code><a href="Wchar.h" title="Wchar.h">wchar.h</a></code>.
</p><p>Большинство функций <code>string.h</code> не производят никакого выделения памяти и контроля границ; эта обязанность целиком возлагается на программиста.
</p>

<div class="mw-heading mw-heading2"><h2 id="Константы_и_типы"><span id=".D0.9A.D0.BE.D0.BD.D1.81.D1.82.D0.B0.D0.BD.D1.82.D1.8B_.D0.B8_.D1.82.D0.B8.D0.BF.D1.8B"></span>Константы и типы</h2></div>
<table class="wikitable">

<tbody><tr>
<th>Имя</th>
<th>Примечания
</th></tr>
<tr>
<td><code>NULL</code></td>
<td>расширяется в null pointer; то есть, значение, которое гарантированно не является валидным адресом объекта в памяти.
</td></tr>
<tr>
<td><code>size_t</code></td>
<td>беззнаковое целое, имеющее тот же тип, что и результат оператора <code>sizeof</code>.
</td></tr></tbody></table>
<div class="mw-heading mw-heading2"><h2 id="Функции"><span id=".D0.A4.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B8"></span>Функции</h2></div>
<table class="wikitable">

<tbody><tr>
<th>Имя</th>
<th>Примечания
</th></tr>
<tr>
<td><code>void *<a href="Memcpy" title="Memcpy">memcpy</a>(void *dest, const void *src, size_t n);</code>
</td>
<td>копирует n байт из области памяти src в dest, которые не должны пересекаться, в противном случае результат не определён (возможно как правильное копирование, так и нет)
</td></tr>
<tr>
<td><code>void *memmove(void *dest, const void *src, size_t n);</code>
</td>
<td>копирует n байт из области памяти src в dest, которые в отличие от <code>memcpy</code> могут перекрываться
</td></tr>
<tr>
<td><code>void *memchr(const char *s, char c, size_t n);</code>
</td>
<td>возвращает указатель на первое вхождение значения c среди первых n байтов s или NULL, если не найдено
</td></tr>
<tr>
<td><code>int memcmp(const char *s1, const char *s2, size_t n);</code>
</td>
<td>сравнивает первые n символов в областях памяти
</td></tr>
<tr>
<td><code>void *memset(char *dest, char value, size_t size);</code>
</td>
<td>заполняет область памяти одним байтом value
</td></tr>
<tr>
<td><code>char *strcat(char *dest, const char *src);</code>
</td>
<td>дописывает строку src в конец dest
</td></tr>
<tr>
<td><code>char *strncat(char *dest, const char *src, size_t n);</code>
</td>
<td>дописывает не более n начальных символов строки src (или всю src, если её длина меньше) в конец dest
</td></tr>
<tr>
<td><code>char *strchr(const char *s, int c);</code>
</td>
<td>возвращает адрес символа c в строке s, начиная с головы, или NULL, если строка s не содержит символ c
</td></tr>
<tr>
<td><code>char *strrchr(const char *s, int c);</code>
</td>
<td>возвращает адрес символа c в строке s, начиная с хвоста, или NULL, если строка s не содержит символ c
</td></tr>
<tr>
<td><code>int strcmp(const char *s1, const char *s2);</code>
</td>
<td>лексикографическое сравнение строк (возвращает "0", если строки одинаковые, положительное, если первая строка больше, и отрицательное, если меньше)
</td></tr>
<tr>
<td><code>int strncmp(const char *s1, const char *s2, size_t n);</code>
</td>
<td>лексикографическое сравнение первых n байтов строк
</td></tr>
<tr>
<td><code>int strcoll(const char *s1, const char *s2);</code>
</td>
<td>лексикографическое сравнение строк с учетом локали collating order
</td></tr>
<tr>
<td><code>char *<a href="Strcpy" title="Strcpy">strcpy</a>(char *toHere, const char *fromHere);</code>
</td>
<td>копирует строку из одного места в другое
</td></tr>
<tr>
<td><code>char *<a href="Strncpy" title="Strncpy">strncpy</a>(char *toHere, const char *fromHere, size_t n);</code>
</td>
<td>копирует до n байт строки из одного места в другое
</td></tr>
<tr>
<td><code>char *<a href="Strerror" title="Strerror">strerror</a>(int);</code>
</td>
<td>возвращает строковое представление сообщения об ошибке <a href="Errno" class="mw-redirect" title="Errno">errno</a> (не потоко-безопасная)
</td></tr>
<tr>
<td><code>size_t strlen(const char *str);</code>
</td>
<td>возвращает длину строки
</td></tr>
<tr>
<td><code>size_t strspn(const char *s, const char *accept);</code>
</td>
<td>определяет максимальную длину начальной подстроки, состоящей исключительно из байтов, перечисленных в accept
</td></tr>
<tr>
<td><code>size_t strcspn(const char *s, const char *reject);</code>
</td>
<td>определяет максимальную длину начальной подстроки, состоящей исключительно из байтов, не перечисленных в reject
</td></tr>
<tr>
<td><code>char *strpbrk(const char *s, const char *accept);</code>
</td>
<td>находит первое вхождение любого символа, перечисленного в accept
</td></tr>
<tr>
<td><code>char *strstr(const char *haystack, const char *needle);</code>
</td>
<td>находит первое вхождение строки needle в haystack
</td></tr>
<tr>
<td><code>char *<a href="Strtok" title="Strtok">strtok</a>(char *dest, const char *src);</code>
</td>
<td>преобразует строку в последовательность токенов. Не потоко-безопасная, не <a href="%D0%A0%D0%B5%D0%B5%D0%BD%D1%82%D0%B5%D1%80%D0%B0%D0%B1%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C" title="Реентерабельность">реентерабельная</a>.
</td></tr>
<tr>
<td><code>size_t strxfrm(char *dest, const char *src, size_t n);</code>
</td>
<td>создает оттранслированную копию строки, такую, что дословное сравнение её (strcmp) будет эквивалентно сравнению с коллатором.
</td></tr></tbody></table>
<div class="mw-heading mw-heading3"><h3 id="Расширения_к_ISO_C"><span id=".D0.A0.D0.B0.D1.81.D1.88.D0.B8.D1.80.D0.B5.D0.BD.D0.B8.D1.8F_.D0.BA_ISO_C"></span>Расширения к ISO C</h3></div>
<table class="wikitable">

<tbody><tr>
<th>Имя</th>
<th>Примечания</th>
<th>Определена в
</th></tr>
<tr>
<td><code>char *<a href="Strdup" title="Strdup">strdup</a>(const char *);</code>
</td>
<td>создает копию строки и возвращает указатель на неё
</td>
<td><a href="POSIX" title="POSIX">POSIX</a>; первоначально расширение в BSD
</td></tr>
<tr>
<td><code>errno_t strcpy_s(char *restrict s1, rsize_t s1max, const char *restrict s2);</code>
</td>
<td>вариант <code>strcpy</code> с контролем границ
</td>
<td>ISO/IEC WDTR 24731
</td></tr>
<tr>
<td><code>void *mempcpy(void *dest, const void *src, size_t n);</code>
</td>
<td>вариант <code>memcpy</code> с возвратом байта, следующего за последним записанным
</td>
<td><a href="GNU" title="GNU">GNU</a>
</td></tr>
<tr>
<td><code>void    *memccpy(void *dest, const void *src, int c, size_t n);</code>
</td>
<td>копирует до n байт из одной области памяти в другую (не должны пересекаться), останавливаясь при встрече символа c
</td>
<td>UNIX 98?
</td></tr>
<tr>
<td><code>int     *strerror_r(int, char *, size_t);</code>
</td>
<td>возвращает строкое представление кода ошибки <a href="Errno" class="mw-redirect" title="Errno">errno</a> (потоко-безопасная; небольшая разница в семантике между <a href="GNU" title="GNU">GNU</a> и <a href="XSI" class="mw-redirect" title="XSI">XSI</a>/<a href="POSIX" title="POSIX">POSIX</a>)
</td>
<td>GNU, POSIX
</td></tr>
<tr>
<td><code>size_t <a href="Strlcpy" title="Strlcpy">strlcpy</a>(char *dest, const char *src, size_t n);</code>
</td>
<td>вариант <code>strcpy</code> с контролем границ
</td>
<td>первоначально <a href="OpenBSD" title="OpenBSD">OpenBSD</a>, теперь также <a href="FreeBSD" title="FreeBSD">FreeBSD</a>, <a href="Solaris_Operating_System" class="mw-redirect" title="Solaris Operating System">Solaris</a>, <a href="Mac_OS_X" class="mw-redirect" title="Mac OS X">Mac OS X</a>
</td></tr>
<tr>
<td><code>char    *strtok_r(char *, const char *, char **);</code>
</td>
<td>потоко-безопасная реентерабельная версия strtok
</td>
<td>POSIX
</td></tr>
<tr>
<td><code>char    *strsignal(int sig);</code>
</td>
<td>по аналогии с <code>strerror</code>, возвращает строковое представление <a href="%D0%A1%D0%B8%D0%B3%D0%BD%D0%B0%D0%BB%D1%8B_(UNIX)" class="mw-redirect" title="Сигналы (UNIX)">сигнала</a> <code>sig</code> (не потоко-безопасная)
</td>
<td>BSDs, Solaris, Linux
</td></tr></tbody></table>
<div class="mw-heading mw-heading2"><h2 id="Ссылки"><span id=".D0.A1.D1.81.D1.8B.D0.BB.D0.BA.D0.B8"></span>Ссылки</h2></div>
<ul><li><code><a rel="nofollow" class="external text" href="http://www.opengroup.org/onlinepubs/9699919799/basedefs/string.h.html">string.h</a></code>&nbsp;—&nbsp;основные определения, <a href="Single_Unix_Specification" class="mw-redirect" title="Single Unix Specification">The Single UNIX® Specification</a>, выпуск 7 от <a href="The_Open_Group" title="The Open Group">The Open Group</a> &nbsp;<span class="ref-info" title="на английском языке" style="cursor:help;">(англ.)</span></li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
    Эта статья взята у (из) <a class="external text" title="Последний раз редактировалась 2025-04-24" href="https://ru.wikipedia.org/wiki/?title=String.h&amp;oldid=144723749">Википедия</a>. Текст лицензируется по <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.ru">Creative Commons Attribution-Share Alike 4.0</a>. К медиа файлам могут применятся дополнительные условия.
</div>
</div><!--/htdig_noindex--></div>
      </div>
    </div>
     <script src="./_webp_/webpHandler.js"></script>
  

</body></html>