You are on page 1of 12

C string handling - Wikipedia, the free encyclopedia

https://en.wikipedia.org/wiki/C_string_handling#s...

C string handling
From Wikipedia, the free encyclopedia

The C programming language has a set of functions implementing operations on


strings (character strings and byte strings) in its standard library. Various
operations, such as copying, concatenation, tokenization and searching are
supported. For character strings, the standard library uses the convention that
strings are null-terminated: a string of n characters is represented as an array of
n + 1 elements, the last of which is a "NUL" character.
The only support for strings in the programming language proper is that the
compiler translates quoted string constants into null-terminated strings.

Contents
1 Denitions
2 Character encodings
3 Overview of functions
3.1 Constants and types
3.2 Functions
3.2.1 Multibyte functions
3.3 Numeric conversions
4 Popular extensions
5 Replacements
6 See also
7 Notes
8 References
9 External links

Denitions
A string is a contiguous sequence of code units terminated by the rst zero code
(\0, corresponding to the null character). In C, there are two types of strings:
string, which is sometimes called byte string which uses the type chars as code
units (one char is at least 8 bits), and wide string[1] which uses the type wchar_t as
code units.
A common misconception is that all char arrays are strings, because string literals
are converted to arrays during the compilation (or translation) phase.[2] It is
important to remember that a string ends at the rst zero code unit. An array or
string literal that contains a zero before the last byte therefore contains a string,

1 of 12

09/07/2016 01:02 PM

C string handling - Wikipedia, the free encyclopedia

https://en.wikipedia.org/wiki/C_string_handling#s...

or possibly several strings, but is not itself a string.[3] Conversely, it is possible to


create a char array that is not null-terminated and is thus not a string: char is often
used as a small integer when needing to save memory.
The term pointer to a string is used in C to describe a pointer to the initial
(lowest-addressed) byte of a string.[1] In C, pointers are used to pass strings to
functions. Documentation (including this page) will often use the term string to
mean pointer to a string.
The term length of a string is used in C to describe the number of bytes
preceding the zero byte.[1] strlen is a standardised function commonly used to
determine the length of a string. A common mistake is to not realize that a string
uses one more unit of memory than this length, in order to store the zero that
ends the string.

Character encodings
Each string ends at the rst occurrence of the zero code unit of the appropriate
kind (char or wchar_t). Consequently, a byte string can contain non-NUL characters
in ASCII or any ASCII extension, but not characters in encodings such as UTF-16
(even though a 16-bit code unit might be nonzero, its high or low byte might be
zero). The encodings that can be stored in wide strings are dened by the width of
wchar_t. In most implementations, wchar_t is at least 16 bits, and so all 16-bit
encodings, such as UCS-2, can be stored. If wchar_t is 32-bits, then 32-bit
encodings, such as UTF-32, can be stored.
Variable-width encodings can be used in both byte strings and wide strings. String
length and osets are measured in bytes or wchar_t, not in "characters", which can
be confusing to beginning programmers. UTF-8 and Shift JIS are often used in C
byte strings, while UTF-16 is often used in C wide strings when wchar_t is 16 bits.
Truncating strings with variable length characters using functions like strncpy can
produce invalid sequences at the end of the string. This can be unsafe if the
truncated parts are interpreted by code that assumes the input is valid.
Support for Unicode literals such as char foo[512] = "";(UTF-8) or wchar_t
foo[512] = L""; (UTF-16 or UTF-32) is implementation dened, [4] and may
require that the source code be in the same encoding. Some compilers or editors
will require entering all non-ASCII characters as \xNN sequences for each byte of
UTF-8, and/or \uNNNN for each word of UTF-16.

Overview of functions
Most of the functions that operate on C strings are declared in the string.h header
(cstring in C++), while functions that operate on C wide strings are declared in the
2 of 12

09/07/2016 01:02 PM

C string handling - Wikipedia, the free encyclopedia

https://en.wikipedia.org/wiki/C_string_handling#s...

header (cwchar in C++). These headers also contain declarations of functions


used for handling memory buers; the name is thus something of a misnomer.
wchar.h

Functions declared in string.h are extremely popular since, as a part of the C


standard library, they are guaranteed to work on any platform which supports C.
However, some security issues exist with these functions, such as potential buer
overows when not used carefully and properly, causing the programmers to
prefer safer and possibly less portable variants, out of which some popular ones
are listed below. Some of these functions also violate const-correctness by
accepting a const string pointer and returning a non-const pointer within the string.
To correct this, some have been separated into two overloaded functions in the
C++ version of the standard library.
In historical documentation the term "character" was often used instead of "byte"
for C strings, which leads many to believe that these functions somehow do not
work for UTF-8. In fact all lengths are dened as being in bytes and this is true in
all implementations, and these functions work as well with UTF-8 as with
single-byte encodings. The BSD documentation has been xed to make this clear,
but POSIX, Linux, and Windows documentation still uses "character" in many
places where "byte" or "wchar_t" is the correct term.
Functions for handling memory buers can process sequences of bytes that
include null-byte as part of the data. Names of these functions typically start with
mem, as opposite to the str prex.

Constants and types


Name

Notes

NULL

Macro expanding to the null pointer constant; that is, a constant


representing a pointer value which is guaranteed not to be a valid
address of an object in memory.

wchar_t

Type used for a code unit in wide strings, usually either 16 or 32 bits.
No specic interpretation is specied for these code units; the C
standard requires of a wchar_t only that it be at least as large as a char,
not that it can actually store Unicode code points or UTF-16 code
units.[5]

wint_t

Integer type that can hold any value of a wchar_t as well as the value of
the macro WEOF. This type is unchanged by integral promotions.
Usually a 32 bit signed value.

mbstate_t

Contains all the information about the conversion state required from
one call to a function to the other.

Functions

3 of 12

09/07/2016 01:02 PM

C string handling - Wikipedia, the free encyclopedia

Byte
string

String
manipulation

String
examination

Miscellaneous

Memory
manipulation

4 of 12

Wide
string

https://en.wikipedia.org/wiki/C_string_handling#s...

Description[note 1]

strcpy[6]

wcscpy[7]

Copies one string to another

strncpy[8]

wcsncpy[9]

Writes exactly n bytes/wchar_t, copying


from source or adding nulls

strcat[10]

wcscat[11]

Appends one string to another

strncat[12]

wcsncat[13]

Appends no more than n bytes/wchar_t


from one string to another

strxfrm[14]

wcsxfrm[15]

Transforms a string according to the


current locale

strlen[16]

wcslen[17]

Returns the length of the string

strcmp[18]

wcscmp[19]

Compares two strings (three-way


comparison)

strncmp[20]

wcsncmp[21]

Compares a specic number of


bytes/wchar_t in two strings

strcoll[22]

wcscoll[23]

Compares two strings according to the


current locale

strchr[24]

wcschr[25]

Finds the rst occurrence of a byte/wchar_t


in a string

strrchr[26]

wcsrchr[27]

Finds the last occurrence of a byte/wchar_t


in a string

strspn[28]

wcsspn[29]

Finds in a string the rst occurrence of a


byte/wchar_t not in a set

strcspn[30]

wcscspn[31]

Finds in a string the last occurrence of a


byte/wchar_t not in a set

strpbrk[32]

wcspbrk[33]

Finds in a string the rst occurrence of a


byte/wchar_t in a set

strstr[34]

wcsstr[35]

Finds the rst occurrence of a substring


in a string

strtok[36]

wcstok[37]

Splits a string into tokens

strerror[38]

N/A

Returns a string containing a message


derived from an error code

memset[39]

wmemset[40]

Fills a buer with a repeated byte/wchar_t

memcpy[41]

wmemcpy[42]

Copies one buer to another

memmove[43]

wmemmove[44]

Copies one buer to another, possibly


overlapping, buer

09/07/2016 01:02 PM

C string handling - Wikipedia, the free encyclopedia

https://en.wikipedia.org/wiki/C_string_handling#s...

memcmp[45]

wmemcmp[46]

Compares two buers (three-way


comparison)

memchr[47]

wmemchr[48]

Finds the rst occurrence of a byte/wchar_t


in a buer

1. Here string refers either to byte string or wide string

Multibyte functions
Name

Description

mblen[49]

Returns the number of bytes in the next multibyte character

mbtowc[50]

Converts the next multibyte character to a wide character

wctomb[51]

Converts a wide character to its multibyte representation

mbstowcs[52]

Converts a multibyte string to a wide string

wcstombs[53]

Converts a wide string to a multibyte string

btowc[54]

Convert a single-byte character to wide character, if possible

wctob[55]

Convert a wide character to a single-byte character, if possible

mbsinit[56]

Checks if a state object represents initial state

mbrlen[57]

Returns the number of bytes in the next multibyte character,


given state

mbrtowc[58]

Converts the next multibyte character to a wide character, given


state

wcrtomb[59]

Converts a wide character to its multibyte representation, given


state

mbsrtowcs[60]

Converts a multibyte string to a wide string, given state

wcsrtombs[61]

Converts a wide string to a multibyte string, given state

"state" is used by encodings that rely on history such as shift states. This is not
needed by UTF-8 or UTF-32. UTF-16 uses them to keep track of surrogate pairs
and to hide the fact that it actually is a multi-word encoding.

Numeric conversions

5 of 12

09/07/2016 01:02 PM

C string handling - Wikipedia, the free encyclopedia

Byte
string

https://en.wikipedia.org/wiki/C_string_handling#s...

Wide
string

Description[note 1]

N/A

converts a string to a oating-point value

N/A

converts a string to an integer (C99)

atof[62]
atoi
atol
atoll[63]
strtof

(C99)[64]

strtod[65]
strtold

(C99)[66]

wcstof

(C99)[67]

wcstod[68]
wcstold

converts a string to a oating-point value

(C99)[69]

strtol

wcstol

strtoll[70]

wcstoll[71]

strtoul

wcstoul

strtoull[72]

wcstoull[73]

converts a string to a signed integer


converts a string to an unsigned integer

1. Here string refers either to byte string or wide string

The C standard library contains several functions for numeric conversions. The
functions that deal with byte strings are dened in the stdlib.h header (cstdlib
header in C++). The functions that deal with wide strings are dened in the
wchar.h header (cwchar header in C++).
The strtoxxx functions are not const-correct, since they accept a const string pointer
and return a non-const pointer within the string. Also, since the Normative
Amendment 1 (C95), atoxx functions are considered subsumed by strtoxxx
functions, for which reason neither C95 nor any later standard provides
wide-character versions of these functions.[74]

Popular extensions

6 of 12

09/07/2016 01:02 PM

C string handling - Wikipedia, the free encyclopedia

Name

https://en.wikipedia.org/wiki/C_string_handling#s...

Platform

Description

memccpy[75]

SVID, POSIX

copies up to specied number of bytes between


two memory areas, which must not overlap,
stopping when a given byte is found.

mempcpy[76]

GNU

a variant of memcpy returning a pointer to the byte


following the last written byte

strcasecmp[77]

POSIX, BSD

case-insensitive versions of

strcat_s[78]

C (2011) and
ISO/IEC WDTR
24731

a variant of strcat that checks the destination


buer size before copying

strcpy_s[79]

C (2011) and
ISO/IEC WDTR
24731

a variant of strcpy that checks the destination


buer size before copying

strdup[80]

POSIX

allocates and duplicates a string

strerror_r[81]

POSIX 1, GNU

a variant of strerror that is thread-safe. The GNU


version is incompatible with the POSIX one.

stricmp[82]

Various

case-insensitive versions of

strlcpy[83]

BSD, Solaris

a variant of strcpy that truncates the result to t


in the destination buer[84]

strlcat[83]

BSD, Solaris

a variant of strcat that truncates the result to t


in the destination buer[84]

strsignal[85]

POSIX:2008

returns string representation of a signal code.


Not thread safe.

strtok_r[86]

POSIX

a variant of

strtok

strcmp

strcmp

that is thread-safe

Replacements
Despite the well-established need to replace strcat[10] and strcpy[6] with functions
that do not allow buer overows, no accepted standard has arisen. This is partly
due to the mistaken belief by many C programmers that strncat and strncpy have
the desired behavior; however, neither function was designed for this (they were
intended to manipulate null-padded xed-size string buers, a data format less
commonly used in modern software), and the behavior and arguments are
non-intuitive and often written incorrectly even by expert programmers. [84]
The most popular[a] replacement are the strlcat and strlcpy functions, which
appeared in OpenBSD 2.4 in December, 1998.[84] These functions always write
one NUL to the destination buer, truncating the result if necessary, and return
the size of buer that would be needed, which allows detection of the truncation

7 of 12

09/07/2016 01:02 PM

C string handling - Wikipedia, the free encyclopedia

https://en.wikipedia.org/wiki/C_string_handling#s...

and provides a size for creating a new buer that will not truncate. They have
been criticized on the basis of allegedly being ineicient, [87] encouraging the use
of C strings and creating more problems than initially trying to solve. [88][89]
Consequently, they have not been included in the GNU C library (used by software
on Linux), although they are implemented in OpenBSD, FreeBSD, NetBSD, Solaris,
OS X, and QNX. The lack of GNU C library support has not stopped various library
authors from using it and bundling a replacement, among other SDL, GLib,
mpeg, rsync, and even internally in the Linux kernel. Open source
implementations for these functions are available.[90][91]
As part of its 2004 Security Development Lifecycle, Microsoft introduced a family
of "secure" functions, such as strcpy_s and strcat_s (along with many others);[92]
these functions were later standardized with some minor changes, and are now
part of the optional C11 (Annex K) as proposed by ISO/IEC WDTR 24731. These
functions perform runtime integrity checks of their arguments; if the checks fail, a
user-specied "runtime-constraint handler" function is called.[93] If the user has
not specied such a function, the default behavior is implementation-dened. [94]
Microsoft's C runtime will abort the program when the constraints are
violated.[95] Some functions perform destructive operations before calling the
runtime-constraint handler; for example, strcat_s sets the destination to the empty
string,[96] which can make it diicult to recover from error conditions or debug
them. These functions attracted considerable criticism because initially they were
implemented only on Windows, and at the same time warning messages started to
be produced by Microsoft Visual C++, suggesting the programmers to use these
functions instead of standard ones. This has been speculated by some to be an
attempt by Microsoft to lock developers into its platform.[97] Although
open-source implementations of these functions are available,[98] these functions
are not present in common Unix C libraries. Experience with the safe functions
has shown signicant problems with their adoption and the removal of the
optional C11 (Annex K) is proposed for the next revision of the standard[99]
If the string length is known, then memcpy[41] or memmove[43] can be more eicient
than strcpy, so some programs use them to optimize C string manipulation. They
accept a buer length as a parameter, so they can be employed to prevent buer
overows in a manner similar to the aforementioned functions.

See also
C syntax Strings source code syntax, including backslash escape
sequences
String functions
Null-terminated string

8 of 12

09/07/2016 01:02 PM

C string handling - Wikipedia, the free encyclopedia

https://en.wikipedia.org/wiki/C_string_handling#s...

Notes
a. On GitHub, there are 7,813,206 uses of
15,286,150 uses of strcpy).

strlcpy,

versus 38,644 uses of

strcpy_s

(and

References
1. "The C99 standard draft + TC3" (PDF). 7.1.1p1. Retrieved 7 January 2011.
2. "The C99 standard draft + TC3" (PDF). 6.4.5p7. Retrieved 7 January 2011.
3. "The C99 standard draft + TC3" (PDF). Section 6.4.5 footnote 66. Retrieved 7 January
2011.
4. "The C99 standard draft + TC3" (PDF). 5.1.1.2 Translation phases, p1. Retrieved
23 December 2011.
5. Gillam, Richard (2003). Unicode Demystied: A Practical Programmer's Guide to the
Encoding Standard. Addison-Wesley Professional. p.714.
6. "strcpy - cppreference.com". En.cppreference.com. 2014-01-02. Retrieved
2014-03-06.
7. "wcscpy - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
8. "strncpy - cppreference.com". En.cppreference.com. 2013-10-04. Retrieved
2014-03-06.
9. "wcsncpy - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
10. "strcat - cppreference.com". En.cppreference.com. 2013-10-08. Retrieved
2014-03-06.
11. "wcscat - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
12. "strncat - cppreference.com". En.cppreference.com. 2013-07-01. Retrieved
2014-03-06.
13. "wcsncat - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
14. "strxfrm - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
15. "wcsxfrm - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
16. "strlen - cppreference.com". En.cppreference.com. 2013-12-27. Retrieved
2014-03-06.
17. "wcslen - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
18. "strcmp - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
19. "wcscmp - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
20. "strncmp - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
21. "wcsncmp - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
22. "strcoll - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
23. "wcscoll - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
24. "strchr - cppreference.com". En.cppreference.com. 2014-02-23. Retrieved
2014-03-06.
25. "wcschr - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
26. "strrchr - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
27. "wcsrchr - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
28. "strspn - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
29. "wcsspn - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
30. "strcspn - cppreference.com". En.cppreference.com. 2013-05-31. Retrieved
2014-03-06.
31. "wcscspn - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.

9 of 12

09/07/2016 01:02 PM

C string handling - Wikipedia, the free encyclopedia

https://en.wikipedia.org/wiki/C_string_handling#s...

32. "strpbrk - cppreference.com". En.cppreference.com. 2013-05-31. Retrieved


2014-03-06.
33. "wcspbrk - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
34. "strstr - cppreference.com". En.cppreference.com. 2013-10-16. Retrieved
2014-03-06.
35. "wcsstr - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
36. "strtok - cppreference.com". En.cppreference.com. 2013-09-03. Retrieved
2014-03-06.
37. "wcstok - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
38. "strerror - cppreference.com". En.cppreference.com. 2013-05-31. Retrieved
2014-03-06.
39. "memset - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
40. "wmemset - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
41. "memcpy - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
42. "wmemcpy - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
43. "memmove - cppreference.com". En.cppreference.com. 2014-01-25. Retrieved
2014-03-06.
44. "wmemmove - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
45. "memcmp - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
46. "wmemcmp - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
47. "memchr - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
48. "wmemchr - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
49. "mblen - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
50. "mbtowc - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
51. "wctomb - cppreference.com". En.cppreference.com. 2014-02-04. Retrieved
2014-03-06.
52. "mbstowcs - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
53. "wcstombs - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
54. "btowc - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
55. "wctob - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
56. "mbsinit - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
57. "mbrlen - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
58. "mbrtowc - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
59. "wcrtomb - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
60. "mbsrtowcs - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
61. "wcsrtombs - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
62. "atof - cppreference.com". En.cppreference.com. 2013-05-31. Retrieved 2014-03-06.
63. "atoi, atol, atoll - cppreference.com". En.cppreference.com. 2014-01-18. Retrieved
2014-03-06.
64. "strtof, strtod, strtold - cppreference.com". En.cppreference.com. 2014-02-04.
Retrieved 2014-03-06.
65. "strtof, strtod, strtold - cppreference.com". En.cppreference.com. 2014-02-04.
Retrieved 2014-03-06.
66. "strtof, strtod, strtold - cppreference.com". En.cppreference.com. 2014-02-04.
Retrieved 2014-03-06.
67. "wcstof, wcstod, wcstold - cppreference.com". En.cppreference.com. Retrieved
2014-03-06.
68. "wcstof, wcstod, wcstold - cppreference.com". En.cppreference.com. Retrieved
2014-03-06.
69. "wcstof, wcstod, wcstold - cppreference.com". En.cppreference.com. Retrieved
2014-03-06.

10 of 12

09/07/2016 01:02 PM

C string handling - Wikipedia, the free encyclopedia

https://en.wikipedia.org/wiki/C_string_handling#s...

70. "strtol, strtoll - cppreference.com". En.cppreference.com. 2014-02-04. Retrieved


2014-03-06.
71. "wcstol, wcstoll - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
72. "strtoul, strtoull - cppreference.com". En.cppreference.com. 2014-02-04. Retrieved
2014-03-06.
73. "wcstoul, wcstoull - cppreference.com". En.cppreference.com. Retrieved 2014-03-06.
74. C99 Rationale, 7.20.1.1 (http://www.open-std.org/jtc1/sc22/wg14/www
/C99RationaleV5.10.pdf)
75. "memccpy". Pubs.opengroup.org. Retrieved 2014-03-06.
76. "mempcpy(3) - Linux manual page". Kernel.org. Retrieved 2014-03-06.
77. "strcasecmp(3) - Linux manual page". Kernel.org. Retrieved 2014-03-06.
78. "strcat_s, wcscat_s, _mbscat_s". Msdn.microsoft.com. Retrieved 2014-03-06.
79. "strcpy_s, wcscpy_s, _mbscpy_s". Msdn.microsoft.com. Retrieved 2014-03-06.
80. "strdup". Pubs.opengroup.org. Retrieved 2014-03-06.
81. "strerror(3) - Linux manual page". Kernel.org. Retrieved 2014-03-06.
82. "String | stricmp()". C Programming Expert.com. Retrieved 2014-03-06.
83. "strlcpy, strlcat size-bounded string copying and concatenation". OpenBSD.
Retrieved 2016-05-26.
84. Todd C. Miller; Theo de Raadt (1999). "strlcpy and strlcat consistent, safe, string
copy and concatenation.". USENIX '99.
85. "strsignal". Pubs.opengroup.org. Retrieved 2014-03-06.
86. "strtok". Pubs.opengroup.org. Retrieved 2014-03-06.
87. Miller, Damien (October 2005). "Secure Portability" (PDF). Retrieved 26 June 2016.
"This [strlcpy and strlcat] API has been adopted by most modern operating systems
and many standalone software packages [...]. The notable exception is the GNU
standard C library, glibc, whose maintainer steadfastly refuses to include these
improved APIs, labelling them horribly ineicient BSD crap, despite prior evidence
that they are faster is most cases than the APIs they replace."
88. libc-alpha mailing list (http://sources.redhat.com/ml/libc-alpha/), selected messages
from 8 August 2000 thread: 53 (http://sources.redhat.com/ml/libc-alpha/2000-08
/msg00053.html), 60 (http://sources.redhat.com/ml/libc-alpha/2000-08
/msg00060.html), 61 (http://sources.redhat.com/ml/libc-alpha/2000-08
/msg00061.html)
89. The ups and downs of strlcpy(); LWN.net (https://lwn.net/Articles/507319/)
90. Todd C. Miller. "strlcpy.c". BSD Cross Reference.
91. Todd C. Miller. "strlcat.c". BSD Cross Reference.
92. Lovell, Martyn. "Repel Attacks on Your Code with the Visual Studio 2005 Safe C and
C++ Libraries". Retrieved 13 February 2015.
93. "The C11 standard draft" (PDF). K.3.1.4p2. Retrieved 13 February 2013.
94. "The C11 standard draft" (PDF). K.3.6.1.1p4. Retrieved 13 February 2013.
95. "Parameter Validation".
96. "The C11 standard draft" (PDF). K.3.7.2.1p4. Retrieved 13 February 2013.
97. Danny Kalev. "They're at it again". InformIT. Retrieved 10 November 2011.
98. Safe C Library. "The Safe C Library provides bound checking memory and string
functions per ISO/IEC TR24731". Sourceforge. Retrieved 6 March 2013.
99. "Field Experience With Annex K Bounds Checking Interfaces". Retrieved
5 November 2015.

External links
11 of 12

09/07/2016 01:02 PM

C string handling - Wikipedia, the free encyclopedia

https://en.wikipedia.org/wiki/C_string_handling#s...

Fast memcpy in C
(http://www.danielvik.com/2010/02/fastmemcpy-in-c.html), multiple C coding
examples to target dierent types of CPU
instruction architectures

The Wikibook C
Programming has a
page on the topic of: C
Programming/Strings

Retrieved from "https://en.wikipedia.org/w/index.php?title=C_string_handling&


oldid=731462588#strchr"
Categories: C (programming language) C standard library
String (computer science)
This page was last modied on 25 July 2016, at 14:39.
Text is available under the Creative Commons Attribution-ShareAlike License;
additional terms may apply. By using this site, you agree to the Terms of Use
and Privacy Policy. Wikipedia is a registered trademark of the Wikimedia
Foundation, Inc., a non-prot organization.

12 of 12

09/07/2016 01:02 PM