#include <string.h>
Строковые функции исполняют, строковые операции на NULL конца строки.
Примечание:
Если Вы работаете со строками в программном пространстве (flash), следует использовать строковые функции, описанные в <avr/pgmspace.h>: Утилиты программного пространства.
|
|
Макроопределение |
|
#define |
_FFS(x) |
Функции |
|
int |
ffs (int) __attribute__((const )) |
int |
ffsl (long) __attribute__((const )) |
int |
ffsll (long long) __attribute__((const)) |
void * |
memccpy
(void *, const void *, int, size_t) |
void * |
memchr
(const void *, int, size_t) __ATTR_PURE__ |
int |
memcmp
(const void *, const void *, size_t) __ATTR_PURE__ |
void * |
memcpy
(void *, const void *, size_t) |
void * |
memmem (const void *, size_t, const void *, size_t) __ATTR_PURE__ |
void * |
memmove
(void *, const void *, size_t) |
void * |
memrchr
(const void *, int, size_t) __ATTR_PURE__ |
void * |
memset
(void *, int, size_t) |
int |
strcasecmp (const char *, const char *) __ATTR_PURE__ |
char * |
strcasestr (const char *, const char *) __ATTR_PURE__ |
char * |
strcat (char *, const char *) |
char * |
strchr
(const char *, int) __ATTR_PURE__ |
char * |
strchrnul
(const char *, int) __ATTR_PURE__ |
int |
strcmp
(const char *, const char *) __ATTR_PURE__ |
char * |
strcpy (char *, const char *) |
size_t |
strcspn
(const char *s, const char *reject) __ATTR_PURE__ |
size_t |
strlcat
(char *, const char *, size_t) |
size_t |
strlcpy
(char *, const char *, size_t) |
size_t |
strlen (const char *) __ATTR_PURE__ |
char * |
strlwr (char *) |
int |
strncasecmp (const char *, const char *, size_t) __ATTR_PURE__ |
char * |
strncat
(char *, const char *, size_t) |
int |
strncmp
(const char *, const char *, size_t) __ATTR_PURE__ |
char * |
strncpy
(char *, const char *, size_t) |
size_t |
strnlen
(const char *, size_t) __ATTR_PURE__ |
char * |
strpbrk
(const char *s, const char *accept) __ATTR_PURE__ |
char * |
strrchr
(const char *, int) __ATTR_PURE__ |
char * |
strrev (char *) |
char * |
strsep (char **, const char *) |
size_t |
strspn
(const char *s, const char *accept) __ATTR_PURE__ |
char * |
strstr
(const char *, const char *) __ATTR_PURE__ |
char * |
strtok_r (char *, const char *, char **) |
char * |
strupr (char *) |
Этот макрос находит первый (самый младший) установленный бит во входном значении. Он похож на функцию ffs() но она кроме того оценивает аргумент во время компиляции, так что этот макрос должен быть применён только во время компиляции константа выражения где это уменьшит до константы непосредственно. Применение этого макроса к выражениям, которые не являются постоянными во время компиляции не рекомендуется, и может привести к огромному количеству сгенерированного кода.
Возвращения:
макрос _FFS () возвращает позицию первого (самого младшего) установленного бита, или 0 если нет установленных бит. Наименее значащий бит - позиция 1.
Эта функция находит первый (самый младший) установленный бит во входном значении.
То
же самое как ffs(), для
аргумента типа
long.
То
же самое как ffs(), для
аргумента
типа long long.
Функция memccpy() копирует не больше, чем len байтов из области памяти, на которую указывает src, в область памяти на которую указывает dest, останавливая. При нахождении символа val копирование прекращается.
Возвращения:
Функция memccpy() возвращает указатель на следующий символ в dest после val или NULL, если символ val не был найден в первых len символах src.
Заголовок: void* memccpy(void
*dest, const void
*src, int val,
size t len)
Пример использования: #include <stdio.h>
#include
<string.h>
char
src[] = "Source string";
char
dest [8];
void
main(void)
{
memccpy(&dest,
&src, ' ', 7);
printf("dest
= %s", dest); //Результат: "dest = Source
"
}
Просмотр
памяти для
символа.
Функция memchr () просматривает первые len байтов области памяти, на которую указывает src, до символа val.
Возвращения:
Функция memchr ()Возвращает
указатель на
совпадающий
байт или NULL, если символ val в
заданной
области
памяти
найден не
был. Заголовок: void* memchr(void
*src, int val,
size_t len)
Пример использования: #include <stdio.h>
#include
<string.h>
char
src[] = "Source string";
char
c;
void
main(void)
{
с = getchar(); //Прием
символа от USART
if
(memchr(src, c, strlen(src)) == NULL)
printf("Character
%c not found", c);
}
Сравнение
областей
памяти.
Функция memcmp () сравнивает первые len байтов областей памяти, которые указывают s1 и s2. сравниватель выполнен с использованием unsigned char операций.
Возвращения:
Функция
memcmp () возвращает
целое число <0, если
sl< s2; 0, если sl =
s2 или
число > 0, если si
> s2.
Заголовок: int memcmp(const void *sl,
const void *s2, size t len)
Пример использования: #include <stdio.h>
#include
<string.h>
char
sl[] = "String 1";
char
s2[] = "String 2";
int
resl, res2;
void
main(void)
{
resl
= memcmp(sl, s2, 6);
res2
= memcmp(sl, s2, strlen(s1));
printf("resl=%d,
res2=%d", resl, res2); //Результат: "resl=0, res2=-l"
}
Примечание:
Убедитесь, что сохранили результат в 16-и битной переменной, так как Вы можете получить неправильные результаты, если используете случайную работу без знака или случайную работу с усечением.
Предупреждение:
Эта
функция mint8
несовместимая,
хотя, если
вас заботит
только
проверке
равенства,
эта функция
должна быть
безопасна в
использовании.
Копирование
области
памяти.
Функция memcpy () копирует len байтов из области памяти, на которую ссылается src, в область памяти, на которую ссылается dest. Эти области памяти не могут пересекаться Используйте memmove() если области памяти действительно накладываются.
Возвращения:
Функция memcpy() возвращает указатель на dest.
Заголовок: void* memcpy(void
*dest, const void
*src, size t
len)
Пример использования: #include <stdio.h>
#include <string.h> char
src[] =
"Source string";
char dest[]
= "Destination
string";
void main(void)
{
memcpy(dest, src,
strlen(src));
printf("dest =
%s", dest);
//Результат: "dest = Source
stringtring"
}
Копия
области
памяти.
Функция memmove () копирует len байтов из области памяти, на которую ссылается src, в область памяти, на которую ссылается dest. Эти области памяти могут пересекаться.
Возвращения:
Функция memmove () возвращает указатель на dest.
Заголовок: void* memmove(void *dest,
const void *src, size t len)
Пример использования: #include <stdio.h>
#include
<string.h>
char
src[] = "Source string";
char
dest[] = "Destination string";
void
main(void)
{
memcpy(dest,
src, strlen(src));
printf("dest
= %s", dest);
//Результат: "dest = Source
stringtring"
}
Функция memrchr () похожа на функцию memchr(), но ищет байты len с конца, на которые указывает src вместо вперед от передней стороны. (Glibc, расширение ГНУ.)
Возвращения:
Функция memrchr () возвращает указатель на совпадающий байт или NULL, если символ val в заданной области памяти найден не был.
Заполнение
памяти
постоянным
байтом.
Функция memset () заполняет первые len байтов из области памяти, на которую ссылается dest, байтом val.
Возвращения:
Функция memset ()возвращает указатель на dest.
Заголовок: void* memset(void *dest,
int val, size_t
len)
Пример использования: #include <stdio.h>
#include
<string.h>
char
dest[] = "Destination string";
void
main(void)
{
memset(dest,
'X' , 11) ;
printf("dest
= %s", dest);
//Результат: "dest =
XXXXXXXXXXX string"
}
Сравнение
двух строк,
без учёта
регистра символов.
Функция
strcasecmp ()
сравнивает
две строки s
1
и s
2
, игнорируя
регистр
символов.
Возвращения:
Функция strcasecmp()возвращает число <0, если sl < s2; 0, если s1 =s2 или число > 0, если s1 > s2. Последствие упорядочения, используемого strcasecmp () является этим если s1 является начальной подстрокой s2, тогда s1 как полагают, является "меньше чем" s2.
Заголовок: int strcasecmp (const char
*sl, const char *s2)
Пример использования: #include <stdio.h>
#include
<string.h>
char
sl[] = "STRING 1";
char
s2[] = "String 2";
int
res;
void
main(void)
{
res
= strcasecmp(si, s2 printf("res=%d", res); //Результат: "res=-l"
}
Функция
strcasestr
() находит
первое
возникновение
подстроки s
2
в
строке s
1
. Эта
функция
похожа на strstr(),
кроме того,
что она
игнорирует
регистр алфавитных
символов в
поиске
подстроки. (Glibc, GNU extension.)
Returns:
Функция
strcasestr
()
возвращает
указатель на
начало
подстроки,
или NULL
если
подстрока не
найдена. Если
s2 points к
строке
нулевой
длины,
функция
возвращает s1.
Функция strcat() добавляет строку src в конец строки dest. Строки не перекрываются. Строка dest должна иметь достаточную длину.
Возвращения:
Функция strcat () возвращает указатель на dest.
Заголовок: char* strcat(char
*dest, const char
*src)
Пример использования: #include <stdio.h>
#include
<string.h>
char
src[] = "String 1";
char
dest[20] = "String 2";
void
main(void)
{
strcat(dest,
src);
printf("dest=%s",
dest); //Результат: "dest = String
2Stringl"
}
Определение
местоположения
символа в строке.
Функция strchr () возвращает указатель на первое вхождение символа val в строке src. Если символ не найден, возвращается NULL.
Заголовок: char* strchr (char
*src, char val)
Пример использования: #include <stdio.h>
#include
<string.h>
char
src[] = "String 1";
unsigned
char c;
void
main(void)
{
с = getchar();
if
(strchr(src, c) == NULL)
printf("Character
%c not found", c)
}
Функция
strchrnul() похожа
на strchr()
за
исключением
того, что,
если c
не найден в s, то
возвращает
указатель на
нулевой байт
в конце s, а не NULL
.
(Glibc, GNU extension.)
Возвращения:
Функция strchrnul () возвращает указатель на согласованный символ, или указатель на нулевой байт в конце s если символ не найден, (то есть, s+strlen(s)).
Сравнение двух строк.
Функция strcmp () сравнивает две строки s1 и s2.
Возвращения:
Функция strcmp () возвращает число <0, если sl< s2; 0, если sl=s2 или число > 0, если s1 > s2.
Заголовок: int strcmp(const char
*sl, const char
*s2)
Пример использования: #include <stdio.h>
#include
<string.h>
char
sl[] = "String 1";
char
s2[] = "String 2";
int
res;
void
main(void)
{
res
= strcmp(sl, s2);
printf("res=%d,
res); // "res=-l"
}
Копирование строки.
Функция strcpy () копирует src в dest с учетом символа завершения строки "\0" Соответствующие области памяти не могут пересекаться.
Возвращения:
Функция strcpy ()
функция
возвращает
указатель на dest .
Заголовок: char* strcpy(char
*dest, const char
*src)
Пример
использования: #include <stdio.h>
#include
<string.h>
char
src[] = "Source string";
char
dest[] = "Destination string";
void
main(void)
{
strcpy(dest,
src);
printf("dest
= %s", dest);
//Результат: "dest = Source
string\0ring"
}
Примечание:
Если
строка
адресата strcpy()
не
достаточно
большая (то
есть если
программист
был глуп/ленив,
и был не в
состоянии
проверить
размер перед
копированием)
то может что
ни будь случиться.
Переполнение
установленных
длин строки -
любимая
методика
взломщика
программной
защиты.
Функция
strcspn () вычисляет
длину
начальной
доли s
который
состоит
полностью из
символов не в
reject
.
Возвращения:
Функция
strcspn () возвращает
число
символов в
начальной доле
s
которые не
находятся в
строке reject
.
Нуль
окончания не
не считают
частью строки.
Конкатенирование двух строк.
Добавляет строку src в конец строки dst размером siz (в отличие от strncat(), siz - полный размер dst, а не пространство слева). Не более siz-1 символов будет скопировано. Всегда заканчивается NULL (если siz <= strlen(dst)).
Возвращения:
Функция
возвращает
значение strlen(scr)
+ MIN(siz, strlen(initial dist). Если
возвращаемое
значение >= siz,
строка
урезается.
Заголовок: size_t strlcat(char *dest, const char *src, size t siz)
Пример использования: #include <stdio.h>
#include <string.h> char src[]
= "String 1";
char destf[1l]
= "String 2";
void
main(void)
{
strlcat(dest,
src, 14);
printf("dest
= %s", dest); //Результат: "dest = String
2Str", - в //dest поместились только 3 символа }
Копирование строки.
Копирует строку src в строку dest размером siz (с учетом символа конца строки "\0").
Возвращения:
Функция strlcpy() возвращает значение strlen(src). Если возвращаемое значение >= siz, строка урезается.
Заголовок: size_t strlcpy(char *dest, const char *src, size t siz)
Описание:.
Пример использования: #include <stdio.h>
#include
<string.h> char src[] = "Source string";
char
dest[] = "Destination string";
void
main(void)
{
strlcpy(dest,
src, strlen(src));
printf("dest
= %s", dest); //Результат: "dest = Source
string\0ring"
}
Вычисление
длины строки.
Функция strlen() возвращает количество символов в src, не включая символ конца строки "\0".
Заголовок: int strlen (const
char *src)
Пример использования: #include <stdio.h>
#include
<string.h>
char
src[] = "Source string";
char
c;
void
main(void)
{
с = getchar(); //Прием символа от USART
if
(memchr(src, c, strlen(src)) == NULL)
printf("Character
%c not found", c);
}
Конвертирование строки в строчные буквы.
Функция strlwr ()переводит символы строки s в нижний регистр и возвращает указатель на полученную строку. Конвертируются только алфавитные символы [A.. Z] . Неалфавитные символы не изменяются.
Returns:
Функция strlwr () возвращает указатель на конвертированную строку.
Пример использования: #include <stdio.h>
#include
<string.h>
char
s[] = "Source STRING";
void
main(void)
{
strlwr(s);
printf("s
= %s", s); //Результат: "s = source
string"
}
Сравнение двух строк, игнорируя регистр.
Функция strncasecmp()
подобна strcasecmp(),
но
сравнивает
только
первые len
символов без
учета
регистра.
Returns:
Функция strncasecmp () возвращает число <0, если sl< s2; 0, если sl=s2 или число > 0, если s1 > s2
Заголовок: int strncasecmp (const char
*sl, const char
*s2, size t
len)
Пример использования: #include <stdio.h>
#include
<string.h> char sl[] = "STRING 1";
char
s2[] = "String 2"; int res;
void
main(void)
{
res
= strncasecmp(s1, s2, 6);
printf("res=%d",
res); // "res=0"
}
Concatenate two strings.
The function strncat() подобна strcat(), добавляет первые len символов строки src в конец строки dest. Строки не могут перекрываться, и строка-приемник должна иметь достаточную длину.
Возвращения:
Функция strncat() возвращает указатель на dest.
Заголовок: char* strncat(char
*dest, const char
*src, size t len)
Пример использования: #include <stdio.h>
#include
<string.h> char src[] = "String 1";
char
dest[20] = "String 2";
void main(void)
{
strncat(dest,
src, 3);
printf("dest=%s",
dest); //Результат: "dest = String
2Str"
}
( |
const char * |
s1, |
|
|
|
|
const char * |
s2, |
|
|
|
size_t |
len |
|
|
) |
|
|
|
Сравнение двух строк.
Функция strncmp() похожа на функцию strcmp(), но сравнивает только первые len символов строк s1 и s2.
Возвращения:
Функция strncmp () возвращает число <0, если sl< s2; 0, если sl=s2 или число > 0, если s1 >s2.
Заголовок: int strncmp(const char
*sl, const char
*s2, unsigned char
len)
Пример использования: #include <stdio.h>
#include
<string.h>
char
sl[] = "String 1";
char
s2[] = "String 2";
int
res;
void
main(void)
{
res
= strncmp(sl, s2, 6);
printf("res=%d,
res); //Результат: "res=0"
}
( |
char * |
dest, |
|
|
|
|
const char * |
src, |
|
|
|
size_t |
len |
|
|
) |
|
|
|
Копирование
строки.
Функция strncpy () подобна функции strcpy (), за исключением того, что копирует len символов строки src в строку dest с учетом символа завершения строки "\0" Соответствующие области памяти не могут пересекаться.
В случае, если длина src - меньше чем это n, остаток от dest дополнятся с пустыми указателями.
Возвращения:
Функция strncpy () возвращает указатель на строку адресата dest.
Заголовок: char* strncpy(char *dest,
const char *src, unsigned char len)
Пример использования: #include <stdio.h>
#include
<string.h>
char
src[] = "Source string";
char
dest[] = "Destination string";
void
main(void)
{
strncpy(dest,
src, 7);
printf("dest
= %s", dest); //Результат: "dest = Source
tion string"
}
( |
const char * |
src, |
|
|
|
|
size_t |
len |
|
|
) |
|
|
|
Определение длины строки установка размера.
Функция strnlen возвращает количество символов в src, не включая символ конца строки "\0", но не больше, чем len.
Заголовок: size t
strnlen(const char *src,
size t len)
Пример использования: #include <stdio.h>
#include
<string.h>
char
s1[ ] = "String 1";
char
s2[ ] = "String 2 - long";
char
11, 12;
void
main(void)
{
11
= strnlen(sl, 10); //11 = 8
12
= strnlen(s2, 10); //12 = 10 printf("ll=%d, 12=%d", 11, 12);
}
( |
const char * |
s, |
|
|
|
|
const char * |
accept |
|
|
) |
|
|
|
Функция
strpbrk
() определяет
местонахождение
первого возникновения
в строке s
любого из
символов
строки accept
.
Возвращения:
Функция
strpbrk
() возвращает
указатель на
символ в s
который
соответствует
одному из
символов в accept
,
или NULL
iесли
никакой
такой символ
не найден.
Нуль конца строки
не
считается частью
строки: если
один или оба
параметра
пусты,
результат будет
NULL
.
( |
const char * |
src, |
|
|
|
|
int |
val |
|
|
) |
|
|
|
Определение местонахождения символа в строке.
Функция strrchr () возвращает указатель на последнее возникновение символа val в строке src. Если символ не найден, возвращается NULL. Здесь "символ" означает "байт" - эти функции не работают с широкими или многобайтными символами.
Заголовок: char* strrchr (char *src,
char val)
Пример использования: #include <stdio.h>
#include
<string.h>
char
src[] = "String 1";
unsigned
char c;
void
main(void)
{
с = getchar() ;
if
(strrchr(src, c) == NULL)
printf("Character
%c not found", c);
}
( |
char * |
s |
) |
|
Описание: Возвращает строку, обратную строке s.
Пример использования: #include <stdio.h>
#include
<string.h>
char
sl[] = "0123456789";
void
main(void)
{
strrev(sl);
//s1 =
"9876543210"
printf("%s",
si);
}
( |
char ** |
sp, |
|
|
|
|
const char * |
delim |
|
|
) |
|
|
|
Заголовок: char* strsep (char *sp,-
const char *delim)
Описание: Находит в строке sp первое вхождение любого символа из строки delim и заменяет его символом "\0". Адрес следующего символа после найденного разделителя присваивается указателю sp. Функция возвращает указатель на исходное значение sp.
Пример использования: #include <stdio.h>
#include
<string.h>
char
s[] = "April 18, 2006";
char
delim[] = ",-";
void
main(void)
{
strsep(s,
delim); //s=" 2006" printf("The year is %s", s+1);
}
( |
const char * |
s, |
|
|
|
|
const char * |
accept |
|
|
) |
|
|
|
Функция
strspn
() вычисляет
длину
начальной
доли s
которая
состоит
полностью из
символов accept
.
Возвращения:
Функция
strspn ()
возвращает
число
символов в
начальной доле
s
которые
состоят
только из
символов accept
.
Нуль конца
строки не
рассматривают
как часть
строки.
( |
const char * |
s1, |
|
|
|
|
const char * |
s2 |
|
|
) |
|
|
|
Заголовок: char* strstr (char *sl, char *s2)
Описание: Ищет первое вхождение подстроки s2 в строке s1 (символы "\0" не учитываются). Возвращает указатель на начало подстроки, или NULL, если подстрока не найдена. Если s2 указывает на строку нулевой длины, возвращается s1
Пример использования: #include <stdio.h>
#include <string.h>
char sl[ ]
= "Red, Green,
Blue"; char s2[1] =
"Green";
char *p;
void
main(void)
{
p =
strstr(sl, s2);
printf("New string", p);
//"Green, Blue"
}
( |
char * |
string, |
|
|
|
|
const char * |
delim, |
|
|
|
char ** |
last |
|
|
) |
|
|
|
Заголовок: char* strtok(char *s,
char const *delim, char *last)
Описание: Просматривает
строку s в поиске
первого
символа, не
входящего в
строку
delim. При
этом
предполагается,
что s1 состоит
из
последовательности
подстрок, разделенных
символами из
строки delim. Первый
вызов
функции
вернет
указатель на
первый символ-разделитель,
после
которого в
строке будет
вставлен
символ "\0".
Последующие
вызовы
функции
будут возвращать
следующие
подстроки со
вставкой вместо
разделителя
символа "\0" до тех
пор, пока не
будут просмотрены
все
разделители.
После этого
возвращается
NULL, last — это
пользовательская
строка,
которая должна
оставаться
неизменной.
Пример использования: #include <stdio.h>
#include
<string.h>
char s[] =
"(050)111-1111";
char
delim[] = "()-";
void
main(void)
{
char
area_code[4];
char
*prefix;
char
*postfix;
strcpy(area_code,strtok_r(s,delim,NULL)
prefix
= strtok(0, delim, NULL);
postfix
= strtok(0, delim, NULL);
printf("Area
code: %s\n\r", area_code);
printf("Prefix:
%s\n\r", prefix);
printf("Postfix:
%s\n\r", postfix);
}
( |
char * |
s |
) |
|
Заголовок: char* strupr(char
*s)
Описание: Переводит символы строки s в верхний регистр и возвращает указатель на полученную строку.
Пример использования: #include <stdio.h>
#include
<string.h>
char
s[ ] = "Source STRING";
void
main(void)
{
strupr(s);
printf("s
= %s", s);
//Результат: "s = SOURCE
STRING"
}