c/c++头文件_string

string, cstring, string.h

一、string头文件

主要包含一些字符串转换的函数

// sto* NARROW CONVERSIONS

// sto* WIDE CONVERSIONS

stoi //convert string to int

stol //convert string to long

stoul //convert string to unsigned long

stoll //convert string to long long

stoull //convert string to unsigned long long

stof // convert string to float

stod // convert string to double

stold // convert string to long double

// to_string NARROW CONVERSIONS

// to_wstring WIDE CONVERSIONS

inline string to_string(int _Val) // convert int to string

string to_string(unsigned int _Val) // convert unsigned int to string

string to_string(long _Val) // convert long to string

string to_string(unsigned long _Val) // convert unsigned long to string

string to_string(_Longlong _Val) // convert long long to string

string to_string(_ULonglong _Val) // convert unsigned long long to string

string to_string(long double _Val) // convert long double to string

string to_string(double _Val) // convert double to string

string to_string(float _Val) // convert float to string

二、头文件string.h里面包含处理字符串的函数

三、cstring 包含了 string.h头文件

源码:

string:

1 // string standard header
  2 #pragma once
  3 #ifndef _STRING_
  4 #define _STRING_
  5 #ifndef RC_INVOKED
  6 #include <iterator>
  7 
  8  #pragma pack(push,_CRT_PACKING)
  9  #pragma warning(push,3)
 10  #pragma push_macro("new")
 11  #undef new
 12 
 13  #pragma warning(disable: 4189)
 14  #pragma warning(disable: 4172)
 15 
 16 _STD_BEGIN
 17         // basic_string INSERTERS AND EXTRACTORS
 18 template<class _Elem,
 19     class _Traits,
 20     class _Alloc> inline
 21     basic_istream<_Elem, _Traits>& operator>>(
 22         basic_istream<_Elem, _Traits>&& _Istr,
 23         basic_string<_Elem, _Traits, _Alloc>& _Str)
 24     {    // extract a string
 25     typedef ctype<_Elem> _Ctype;
 26     typedef basic_istream<_Elem, _Traits> _Myis;
 27     typedef basic_string<_Elem, _Traits, _Alloc> _Mystr;
 28     typedef typename _Mystr::size_type _Mysizt;
 29 
 30     ios_base::iostate _State = ios_base::goodbit;
 31     bool _Changed = false;
 32     const typename _Myis::sentry _Ok(_Istr);
 33 
 34     if (_Ok)
 35         {    // state okay, extract characters
 36         const _Ctype& _Ctype_fac = _USE(_Istr.getloc(), _Ctype);
 37         _Str.erase();
 38 
 39         _TRY_IO_BEGIN
 40         _Mysizt _Size = 0 < _Istr.width()
 41             && (_Mysizt)_Istr.width() < _Str.max_size()
 42                 ? (_Mysizt)_Istr.width() : _Str.max_size();
 43         typename _Traits::int_type _Meta = _Istr.rdbuf()->sgetc();
 44 
 45         for (; 0 < _Size; --_Size, _Meta = _Istr.rdbuf()->snextc())
 46             if(_Traits::eq_int_type(_Traits::eof(), _Meta))
 47                 {    // end of file, quit
 48                 _State |= ios_base::eofbit;
 49                 break;
 50                 }
 51             else if (_Ctype_fac.is(_Ctype::space,
 52                 _Traits::to_char_type(_Meta)))
 53                 break;    // whitespace, quit
 54             else
 55                 {    // add character to string
 56                 _Str.append(1, _Traits::to_char_type(_Meta));
 57                 _Changed = true;
 58                 }
 59         _CATCH_IO_(_Istr)
 60         }
 61 
 62     _Istr.width(0);
 63     if (!_Changed)
 64         _State |= ios_base::failbit;
 65     _Istr.setstate(_State);
 66     return (_Istr);
 67     }
 68 
 69 template<class _Elem,
 70     class _Traits,
 71     class _Alloc> inline
 72     basic_istream<_Elem, _Traits>& getline(
 73         basic_istream<_Elem, _Traits>&& _Istr,
 74         basic_string<_Elem, _Traits, _Alloc>& _Str,
 75         const _Elem _Delim)
 76     {    // get characters into string, discard delimiter
 77     typedef basic_istream<_Elem, _Traits> _Myis;
 78 
 79     ios_base::iostate _State = ios_base::goodbit;
 80     bool _Changed = false;
 81     const typename _Myis::sentry _Ok(_Istr, true);
 82 
 83     if (_Ok)
 84         {    // state okay, extract characters
 85         _TRY_IO_BEGIN
 86         _Str.erase();
 87         const typename _Traits::int_type _Metadelim =
 88             _Traits::to_int_type(_Delim);
 89         typename _Traits::int_type _Meta = _Istr.rdbuf()->sgetc();
 90 
 91         for (; ; _Meta = _Istr.rdbuf()->snextc())
 92             if (_Traits::eq_int_type(_Traits::eof(), _Meta))
 93                 {    // end of file, quit
 94                 _State |= ios_base::eofbit;
 95                 break;
 96                 }
 97             else if (_Traits::eq_int_type(_Meta, _Metadelim))
 98                 {    // got a delimiter, discard it and quit
 99                 _Changed = true;
100                 _Istr.rdbuf()->sbumpc();
101                 break;
102                 }
103             else if (_Str.max_size() <= _Str.size())
104                 {    // string too large, quit
105                 _State |= ios_base::failbit;
106                 break;
107                 }
108             else
109                 {    // got a character, add it to string
110                 _Str += _Traits::to_char_type(_Meta);
111                 _Changed = true;
112                 }
113         _CATCH_IO_(_Istr)
114         }
115 
116     if (!_Changed)
117         _State |= ios_base::failbit;
118     _Istr.setstate(_State);
119     return (_Istr);
120     }
121 
122 template<class _Elem,
123     class _Traits,
124     class _Alloc> inline
125     basic_istream<_Elem, _Traits>& getline(
126         basic_istream<_Elem, _Traits>&& _Istr,
127         basic_string<_Elem, _Traits, _Alloc>& _Str)
128     {    // get characters into string, discard newline
129     return (getline(_Istr, _Str, _Istr.widen('\n')));
130     }
131 
132 template<class _Elem,
133     class _Traits,
134     class _Alloc> inline
135     basic_istream<_Elem, _Traits>& operator>>(
136         basic_istream<_Elem, _Traits>& _Istr,
137         basic_string<_Elem, _Traits, _Alloc>& _Str)
138     {    // extract a string
139     return (_STD move(_Istr) >> _Str);
140     }
141 
142 template<class _Elem,
143     class _Traits,
144     class _Alloc> inline
145     basic_istream<_Elem, _Traits>& getline(
146         basic_istream<_Elem, _Traits>& _Istr,
147         basic_string<_Elem, _Traits, _Alloc>& _Str,
148         const _Elem _Delim)
149     {    // get characters into string, discard delimiter
150     return (getline(_STD move(_Istr), _Str, _Delim));
151     }
152 
153 template<class _Elem,
154     class _Traits,
155     class _Alloc> inline
156     basic_istream<_Elem, _Traits>& getline(
157         basic_istream<_Elem, _Traits>& _Istr,
158         basic_string<_Elem, _Traits, _Alloc>& _Str)
159     {    // get characters into string, discard newline
160     return (getline(_STD move(_Istr), _Str, _Istr.widen('\n')));
161     }
162 
163 template<class _Elem,
164     class _Traits,
165     class _Alloc> inline
166     basic_ostream<_Elem, _Traits>& operator<<(
167         basic_ostream<_Elem, _Traits>& _Ostr,
168         const basic_string<_Elem, _Traits, _Alloc>& _Str)
169     {    // insert a string
170     typedef basic_ostream<_Elem, _Traits> _Myos;
171     typedef basic_string<_Elem, _Traits, _Alloc> _Mystr;
172     typedef typename _Mystr::size_type _Mysizt;
173 
174     ios_base::iostate _State = ios_base::goodbit;
175     _Mysizt _Size = _Str.size();
176     _Mysizt _Pad = _Ostr.width() <= 0 || (_Mysizt)_Ostr.width() <= _Size
177         ? 0 : (_Mysizt)_Ostr.width() - _Size;
178     const typename _Myos::sentry _Ok(_Ostr);
179 
180     if (!_Ok)
181         _State |= ios_base::badbit;
182     else
183         {    // state okay, insert characters
184     _TRY_IO_BEGIN
185         if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left)
186             for (; 0 < _Pad; --_Pad)    // pad on left
187                 if (_Traits::eq_int_type(_Traits::eof(),
188                     _Ostr.rdbuf()->sputc(_Ostr.fill())))
189                     {    // insertion failed, quit
190                     _State |= ios_base::badbit;
191                     break;
192                     }
193 
194         if (_State == ios_base::goodbit
195             && _Ostr.rdbuf()->sputn(_Str.c_str(), (streamsize)_Size)
196                 != (streamsize)_Size)
197                 _State |= ios_base::badbit;
198         else
199             for (; 0 < _Pad; --_Pad)    // pad on right
200                 if (_Traits::eq_int_type(_Traits::eof(),
201                     _Ostr.rdbuf()->sputc(_Ostr.fill())))
202                     {    // insertion failed, quit
203                     _State |= ios_base::badbit;
204                     break;
205                     }
206         _Ostr.width(0);
207         _CATCH_IO_(_Ostr)
208         }
209 
210     _Ostr.setstate(_State);
211     return (_Ostr);
212     }
213 
214         // sto* NARROW CONVERSIONS
215 
216 #define _STRTO_LL    _strtoi64
217 #define _STRTO_ULL    _strtoui64
218 #define _STRTO_F    strtod
219 #define _STRTO_LD    strtod
220 
221 #define _WCSTO_LL    _wcstoi64
222 #define _WCSTO_ULL    _wcstoui64
223 #define _WCSTO_F    wcstod
224 #define _WCSTO_LD    wcstod
225 
226 inline int stoi(const string& _Str, size_t *_Idx = 0,
227     int _Base = 10)
228     {    // convert string to int
229     const char *_Ptr = _Str.c_str();
230     char *_Eptr;
231     errno = 0;
232     long _Ans = _CSTD strtol(_Ptr, &_Eptr, _Base);
233 
234     if (_Ptr == _Eptr)
235         _Xinvalid_argument("invalid stoi argument");
236     if (errno == ERANGE || _Ans < INT_MIN != INT_MAX < _Ans)
237         _Xout_of_range("stoi argument out of range");
238     if (_Idx != 0)
239         *_Idx = (size_t)(_Eptr - _Ptr);
240     return ((int)_Ans);
241     }
242 
243 inline long stol(const string& _Str, size_t *_Idx = 0,
244     int _Base = 10)
245     {    // convert string to long
246     const char *_Ptr = _Str.c_str();
247     char *_Eptr;
248     errno = 0;
249     long _Ans = _CSTD strtol(_Ptr, &_Eptr, _Base);
250 
251     if (_Ptr == _Eptr)
252         _Xinvalid_argument("invalid stol argument");
253     if (errno == ERANGE)
254         _Xout_of_range("stol argument out of range");
255     if (_Idx != 0)
256         *_Idx = (size_t)(_Eptr - _Ptr);
257     return (_Ans);
258     }
259 
260 inline unsigned long stoul(const string& _Str, size_t *_Idx = 0,
261     int _Base = 10)
262     {    // convert string to unsigned long
263     const char *_Ptr = _Str.c_str();
264     char *_Eptr;
265     errno = 0;
266     unsigned long _Ans = _CSTD strtoul(_Ptr, &_Eptr, _Base);
267 
268     if (_Ptr == _Eptr)
269         _Xinvalid_argument("invalid stoul argument");
270     if (errno == ERANGE)
271         _Xout_of_range("stoul argument out of range");
272     if (_Idx != 0)
273         *_Idx = (size_t)(_Eptr - _Ptr);
274     return (_Ans);
275     }
276 
277 inline _Longlong stoll(const string& _Str, size_t *_Idx = 0,
278     int _Base = 10)
279     {    // convert string to long long
280     const char *_Ptr = _Str.c_str();
281     char *_Eptr;
282     errno = 0;
283     _Longlong _Ans = _CSTD _STRTO_LL(_Ptr, &_Eptr, _Base);
284 
285     if (_Ptr == _Eptr)
286         _Xinvalid_argument("invalid stoll argument");
287     if (errno == ERANGE)
288         _Xout_of_range("stoll argument out of range");
289     if (_Idx != 0)
290         *_Idx = (size_t)(_Eptr - _Ptr);
291     return (_Ans);
292     }
293 
294 inline _ULonglong stoull(const string& _Str, size_t *_Idx = 0,
295     int _Base = 10)
296     {    // convert string to unsigned long long
297     const char *_Ptr = _Str.c_str();
298     errno = 0;
299     char *_Eptr;
300     _ULonglong _Ans = _CSTD _STRTO_ULL(_Ptr, &_Eptr, _Base);
301 
302     if (_Ptr == _Eptr)
303         _Xinvalid_argument("invalid stoull argument");
304     if (errno == ERANGE)
305         _Xout_of_range("stoull argument out of range");
306     if (_Idx != 0)
307         *_Idx = (size_t)(_Eptr - _Ptr);
308     return (_Ans);
309     }
310 
311 inline float stof(const string& _Str, size_t *_Idx = 0)
312     {    // convert string to float
313     const char *_Ptr = _Str.c_str();
314     errno = 0;
315     char *_Eptr;
316     float _Ans = (float)_CSTD _STRTO_F(_Ptr, &_Eptr);
317 
318     if (_Ptr == _Eptr)
319         _Xinvalid_argument("invalid stof argument");
320     if (errno == ERANGE)
321         _Xout_of_range("stof argument out of range");
322     if (_Idx != 0)
323         *_Idx = (size_t)(_Eptr - _Ptr);
324     return (_Ans);
325     }
326 
327 inline double stod(const string& _Str, size_t *_Idx = 0)
328     {    // convert string to double
329     const char *_Ptr = _Str.c_str();
330     errno = 0;
331     char *_Eptr;
332     double _Ans = _CSTD strtod(_Ptr, &_Eptr);
333 
334     if (_Ptr == _Eptr)
335         _Xinvalid_argument("invalid stod argument");
336     if (errno == ERANGE)
337         _Xout_of_range("stod argument out of range");
338     if (_Idx != 0)
339         *_Idx = (size_t)(_Eptr - _Ptr);
340     return (_Ans);
341     }
342 
343 inline long double stold(const string& _Str, size_t *_Idx = 0)
344     {    // convert string to long double
345     const char *_Ptr = _Str.c_str();
346     errno = 0;
347     char *_Eptr;
348     long double _Ans = _CSTD _STRTO_LD(_Ptr, &_Eptr);
349 
350     if (_Ptr == _Eptr)
351         _Xinvalid_argument("invalid stold argument");
352     if (errno == ERANGE)
353         _Xout_of_range("stold argument out of range");
354     if (_Idx != 0)
355         *_Idx = (size_t)(_Eptr - _Ptr);
356     return (_Ans);
357     }
358 
359         // sto* WIDE CONVERSIONS
360 inline int stoi(const wstring& _Str, size_t *_Idx = 0,
361     int _Base = 10)
362     {    // convert wstring to int
363     const wchar_t *_Ptr = _Str.c_str();
364     wchar_t *_Eptr;
365     errno = 0;
366     long _Ans = _CSTD wcstol(_Ptr, &_Eptr, _Base);
367 
368     if (_Ptr == _Eptr)
369         _Xinvalid_argument("invalid stoi argument");
370     if (errno == ERANGE || _Ans < INT_MIN != INT_MAX < _Ans)
371         _Xout_of_range("stoi argument out of range");
372     if (_Idx != 0)
373         *_Idx = (size_t)(_Eptr - _Ptr);
374     return ((int)_Ans);
375     }
376 
377 inline long stol(const wstring& _Str, size_t *_Idx = 0,
378     int _Base = 10)
379     {    // convert wstring to long
380     const wchar_t *_Ptr = _Str.c_str();
381     wchar_t *_Eptr;
382     errno = 0;
383     long _Ans = _CSTD wcstol(_Ptr, &_Eptr, _Base);
384 
385     if (_Ptr == _Eptr)
386         _Xinvalid_argument("invalid stol argument");
387     if (errno == ERANGE)
388         _Xout_of_range("stol argument out of range");
389     if (_Idx != 0)
390         *_Idx = (size_t)(_Eptr - _Ptr);
391     return (_Ans);
392     }
393 
394 inline unsigned long stoul(const wstring& _Str, size_t *_Idx = 0,
395     int _Base = 10)
396     {    // convert wstring to unsigned long
397     const wchar_t *_Ptr = _Str.c_str();
398     wchar_t *_Eptr;
399     errno = 0;
400     unsigned long _Ans = _CSTD wcstoul(_Ptr, &_Eptr, _Base);
401 
402     if (_Ptr == _Eptr)
403         _Xinvalid_argument("invalid stoul argument");
404     if (errno == ERANGE)
405         _Xout_of_range("stoul argument out of range");
406     if (_Idx != 0)
407         *_Idx = (size_t)(_Eptr - _Ptr);
408     return (_Ans);
409     }
410 
411 inline _Longlong stoll(const wstring& _Str, size_t *_Idx = 0,
412     int _Base = 10)
413     {    // convert wstring to long long
414     const wchar_t *_Ptr = _Str.c_str();
415     wchar_t *_Eptr;
416     errno = 0;
417     _Longlong _Ans = _CSTD _WCSTO_LL(_Ptr, &_Eptr, _Base);
418 
419     if (_Ptr == _Eptr)
420         _Xinvalid_argument("invalid stoll argument");
421     if (errno == ERANGE)
422         _Xout_of_range("stoll argument out of range");
423     if (_Idx != 0)
424         *_Idx = (size_t)(_Eptr - _Ptr);
425     return (_Ans);
426     }
427 
428 inline _ULonglong stoull(const wstring& _Str, size_t *_Idx = 0,
429     int _Base = 10)
430     {    // convert wstring to unsigned long long
431     const wchar_t *_Ptr = _Str.c_str();
432     errno = 0;
433     wchar_t *_Eptr;
434     _ULonglong _Ans = _CSTD _WCSTO_ULL(_Ptr, &_Eptr, _Base);
435 
436     if (_Ptr == _Eptr)
437         _Xinvalid_argument("invalid stoull argument");
438     if (errno == ERANGE)
439         _Xout_of_range("stoull argument out of range");
440     if (_Idx != 0)
441         *_Idx = (size_t)(_Eptr - _Ptr);
442     return (_Ans);
443     }
444 
445 inline float stof(const wstring& _Str, size_t *_Idx = 0)
446     {    // convert wstring to float
447     const wchar_t *_Ptr = _Str.c_str();
448     errno = 0;
449     wchar_t *_Eptr;
450     float _Ans = (float)_CSTD _WCSTO_F(_Ptr, &_Eptr);
451 
452     if (_Ptr == _Eptr)
453         _Xinvalid_argument("invalid stof argument");
454     if (errno == ERANGE)
455         _Xout_of_range("stof argument out of range");
456     if (_Idx != 0)
457         *_Idx = (size_t)(_Eptr - _Ptr);
458     return (_Ans);
459     }
460 
461 inline double stod(const wstring& _Str, size_t *_Idx = 0)
462     {    // convert wstring to double
463     const wchar_t *_Ptr = _Str.c_str();
464     errno = 0;
465     wchar_t *_Eptr;
466     double _Ans = _CSTD wcstod(_Ptr, &_Eptr);
467 
468     if (_Ptr == _Eptr)
469         _Xinvalid_argument("invalid stod argument");
470     if (errno == ERANGE)
471         _Xout_of_range("stod argument out of range");
472     if (_Idx != 0)
473         *_Idx = (size_t)(_Eptr - _Ptr);
474     return (_Ans);
475     }
476 
477 inline long double stold(const wstring& _Str, size_t *_Idx = 0)
478     {    // convert wstring to long double
479     const wchar_t *_Ptr = _Str.c_str();
480     errno = 0;
481     wchar_t *_Eptr;
482     long double _Ans = _CSTD _WCSTO_LD(_Ptr, &_Eptr);
483 
484     if (_Ptr == _Eptr)
485         _Xinvalid_argument("invalid stold argument");
486     if (errno == ERANGE)
487         _Xout_of_range("stold argument out of range");
488     if (_Idx != 0)
489         *_Idx = (size_t)(_Eptr - _Ptr);
490     return (_Ans);
491     }
492 
493         // to_string NARROW CONVERSIONS
494 
495  #define _LLFMT    "%I64"
496 
497  #define _TOSTRING(buf, fmt, val)    \
498     sprintf_s(buf, sizeof (buf), fmt, val)
499 
500 inline string to_string(int _Val)
501     {    // convert int to string
502     char _Buf[2 * _MAX_INT_DIG];
503 
504     _CSTD _TOSTRING(_Buf, "%d", _Val);
505     return (string(_Buf));
506     }
507 
508 inline string to_string(unsigned int _Val)
509     {    // convert unsigned int to string
510     char _Buf[2 * _MAX_INT_DIG];
511 
512     _CSTD _TOSTRING(_Buf, "%u", _Val);
513     return (string(_Buf));
514     }
515 
516 inline string to_string(long _Val)
517     {    // convert long to string
518     char _Buf[2 * _MAX_INT_DIG];
519 
520     _CSTD _TOSTRING(_Buf, "%ld", _Val);
521     return (string(_Buf));
522     }
523 
524 inline string to_string(unsigned long _Val)
525     {    // convert unsigned long to string
526     char _Buf[2 * _MAX_INT_DIG];
527 
528     _CSTD _TOSTRING(_Buf, "%lu", _Val);
529     return (string(_Buf));
530     }
531 
532 inline string to_string(_Longlong _Val)
533     {    // convert long long to string
534     char _Buf[2 * _MAX_INT_DIG];
535 
536     _CSTD _TOSTRING(_Buf, _LLFMT "d", _Val);
537     return (string(_Buf));
538     }
539 
540 inline string to_string(_ULonglong _Val)
541     {    // convert unsigned long long to string
542     char _Buf[2 * _MAX_INT_DIG];
543 
544     _CSTD _TOSTRING(_Buf, _LLFMT "u", _Val);
545     return (string(_Buf));
546     }
547 
548 inline string to_string(long double _Val)
549     {    // convert long double to string
550     typedef back_insert_iterator<string> _Iter;
551     typedef num_put<char, _Iter> _Nput;
552     const _Nput& _Nput_fac = use_facet<_Nput>(locale());
553     ostream _Ios((streambuf *)0);
554     string _Str;
555 
556     _Ios.setf(ios_base::fixed);
557     _Nput_fac.put(_Iter(_Str), _Ios, ' ', _Val);
558     return (_Str);
559     }
560 
561 inline string to_string(double _Val)
562     {    // convert double to string
563     return (to_string((long double)_Val));
564     }
565 
566 inline string to_string(float _Val)
567     {    // convert float to string
568     return (to_string((long double)_Val));
569     }
570 
571         // to_wstring WIDE CONVERSIONS
572 
573  #define _WLLFMT    L"%I64"
574 
575  #define _TOWSTRING(buf, fmt, val)    \
576     swprintf_s(buf, sizeof (buf) / sizeof (wchar_t), fmt, val)
577 
578 inline wstring to_wstring(int _Val)
579     {    // convert int to wstring
580     wchar_t _Buf[2 * _MAX_INT_DIG];
581 
582     _CSTD _TOWSTRING(_Buf, L"%d", _Val);
583     return (wstring(_Buf));
584     }
585 
586 inline wstring to_wstring(unsigned int _Val)
587     {    // convert unsigned int to wstring
588     wchar_t _Buf[2 * _MAX_INT_DIG];
589 
590     _CSTD _TOWSTRING(_Buf, L"%u", _Val);
591     return (wstring(_Buf));
592     }
593 
594 inline wstring to_wstring(long _Val)
595     {    // convert long to wstring
596     wchar_t _Buf[2 * _MAX_INT_DIG];
597 
598     _CSTD _TOWSTRING(_Buf, L"%ld", _Val);
599     return (wstring(_Buf));
600     }
601 
602 inline wstring to_wstring(unsigned long _Val)
603     {    // convert unsigned long to wstring
604     wchar_t _Buf[2 * _MAX_INT_DIG];
605 
606     _CSTD _TOWSTRING(_Buf, L"%lu", _Val);
607     return (wstring(_Buf));
608     }
609 
610 inline wstring to_wstring(_Longlong _Val)
611     {    // convert long long to wstring
612     wchar_t _Buf[2 * _MAX_INT_DIG];
613 
614     _CSTD _TOWSTRING(_Buf, _WLLFMT L"d", _Val);
615     return (wstring(_Buf));
616     }
617 
618 inline wstring to_wstring(_ULonglong _Val)
619     {    // convert unsigned long long to wstring
620     wchar_t _Buf[2 * _MAX_INT_DIG];
621 
622     _CSTD _TOWSTRING(_Buf, _WLLFMT L"u", _Val);
623     return (wstring(_Buf));
624     }
625 
626 inline wstring to_wstring(long double _Val)
627     {    // convert long double to wstring
628     typedef back_insert_iterator<wstring> _Iter;
629     typedef num_put<wchar_t, _Iter> _Nput;
630     const _Nput& _Nput_fac = use_facet<_Nput>(locale());
631     ostream _Ios((streambuf *)0);
632     wstring _Str;
633 
634     _Ios.setf(ios_base::fixed);
635     _Nput_fac.put(_Iter(_Str), _Ios, L' ', _Val);
636     return (_Str);
637     }
638 
639 inline wstring to_wstring(double _Val)
640     {    // convert double to wstring
641     return (to_wstring((long double)_Val));
642     }
643 
644 inline wstring to_wstring(float _Val)
645     {    // convert float to wstring
646     return (to_wstring((long double)_Val));
647     }
648 _STD_END
649 
650  #pragma pop_macro("new")
651  #pragma warning(pop)
652  #pragma pack(pop)
653 #endif /* RC_INVOKED */
654 #endif /* _STRING */
655 
656 /*
657  * Copyright (c) 1992-2012 by P.J. Plauger.  ALL RIGHTS RESERVED.
658  * Consult your license regarding permissions and restrictions.
659 V6.00:0009 */

string.h

1 /***
  2 *string.h - declarations for string manipulation functions
  3 *
  4 *       Copyright (c) Microsoft Corporation. All rights reserved.
  5 *
  6 *Purpose:
  7 *       This file contains the function declarations for the string
  8 *       manipulation functions.
  9 *       [ANSI/System V]
 10 *
 11 *       [Public]
 12 *
 13 ****/
 14 
 15 #pragma once
 16 
 17 #ifndef _INC_STRING
 18 #define _INC_STRING
 19 
 20 #include <crtdefs.h>
 21 
 22 #ifdef __cplusplus
 23 extern "C" {
 24 #endif  /* __cplusplus */
 25 
 26 #ifndef _NLSCMP_DEFINED
 27 #define _NLSCMPERROR    2147483647  /* currently == INT_MAX */
 28 #define _NLSCMP_DEFINED
 29 #endif  /* _NLSCMP_DEFINED */
 30 
 31 /* Define NULL pointer value */
 32 #ifndef NULL
 33 #ifdef __cplusplus
 34 #define NULL    0
 35 #else  /* __cplusplus */
 36 #define NULL    ((void *)0)
 37 #endif  /* __cplusplus */
 38 #endif  /* NULL */
 39 
 40 /* For backwards compatibility */
 41 #define _WConst_return _CONST_RETURN
 42 
 43 /* Function prototypes */
 44 #ifndef RC_INVOKED
 45 #ifndef _CRT_MEMORY_DEFINED
 46 #define _CRT_MEMORY_DEFINED
 47 _CRTIMP void *  __cdecl _memccpy( _Out_writes_bytes_opt_(_MaxCount) void * _Dst, _In_ const void * _Src, _In_ int _Val, _In_ size_t _MaxCount);
 48 _Check_return_ _CRTIMP _CONST_RETURN void *  __cdecl memchr( _In_reads_bytes_opt_(_MaxCount) const void * _Buf , _In_ int _Val, _In_ size_t _MaxCount);
 49 _Check_return_ _CRTIMP int     __cdecl _memicmp(_In_reads_bytes_opt_(_Size) const void * _Buf1, _In_reads_bytes_opt_(_Size) const void * _Buf2, _In_ size_t _Size);
 50 _Check_return_ _CRTIMP int     __cdecl _memicmp_l(_In_reads_bytes_opt_(_Size) const void * _Buf1, _In_reads_bytes_opt_(_Size) const void * _Buf2, _In_ size_t _Size, _In_opt_ _locale_t _Locale);
 51 _Check_return_ int     __cdecl memcmp(_In_reads_bytes_(_Size) const void * _Buf1, _In_reads_bytes_(_Size) const void * _Buf2, _In_ size_t _Size);
 52 _CRT_INSECURE_DEPRECATE_MEMORY(memcpy_s)
 53 _Post_equal_to_(_Dst)
 54 _At_buffer_((unsigned char*)_Dst, _Iter_, _Size, _Post_satisfies_(((unsigned char*)_Dst)[_Iter_] == ((unsigned char*)_Src)[_Iter_]))
 55 void *  __cdecl memcpy(_Out_writes_bytes_all_(_Size) void * _Dst, _In_reads_bytes_(_Size) const void * _Src, _In_ size_t _Size);
 56 #if __STDC_WANT_SECURE_LIB__
 57 _CRTIMP errno_t  __cdecl memcpy_s(_Out_writes_bytes_to_opt_(_DstSize, _MaxCount) void * _Dst, _In_ rsize_t _DstSize, _In_reads_bytes_opt_(_MaxCount) const void * _Src, _In_ rsize_t _MaxCount);
 58 #if defined (__cplusplus) && _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_MEMORY
 59 extern "C++"
 60 {
 61 #ifndef _CRT_ENABLE_IF_DEFINED
 62   #define _CRT_ENABLE_IF_DEFINED
 63     template<bool _Enable, typename _Ty>
 64     struct _CrtEnableIf;
 65 
 66     template<typename _Ty>
 67     struct _CrtEnableIf<true, _Ty>
 68     {
 69         typedef _Ty _Type;
 70     };
 71 #endif  /* _CRT_ENABLE_IF_DEFINED */
 72     template <size_t _Size, typename _DstType>
 73     inline
 74     typename _CrtEnableIf<(_Size > 1), void *>::_Type __cdecl memcpy(_DstType (&_Dst)[_Size], _In_reads_bytes_opt_(_SrcSize) const void *_Src, _In_ size_t _SrcSize) _CRT_SECURE_CPP_NOTHROW
 75     {
 76         return memcpy_s(_Dst, _Size * sizeof(_DstType), _Src, _SrcSize) == 0 ? _Dst : 0;
 77     }
 78 }
 79 #endif  /* defined (__cplusplus) && _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_MEMORY */
 80 #if defined (__cplusplus) && _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES_MEMORY
 81 extern "C++"
 82 {
 83     template <size_t _Size, typename _DstType>
 84     inline
 85     errno_t __CRTDECL memcpy_s(_DstType (&_Dst)[_Size], _In_reads_bytes_opt_(_SrcSize) const void * _Src, _In_ rsize_t _SrcSize) _CRT_SECURE_CPP_NOTHROW
 86     {
 87         return memcpy_s(_Dst, _Size * sizeof(_DstType), _Src, _SrcSize);
 88     }
 89 }
 90 #endif  /* defined (__cplusplus) && _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES_MEMORY */
 91 #endif  /* __STDC_WANT_SECURE_LIB__ */
 92         _Post_equal_to_(_Dst)
 93         _At_buffer_((unsigned char*)_Dst, _Iter_, _Size, _Post_satisfies_(((unsigned char*)_Dst)[_Iter_] == _Val))
 94         void *  __cdecl memset(_Out_writes_bytes_all_(_Size) void * _Dst, _In_ int _Val, _In_ size_t _Size);
 95 
 96 #if !__STDC__
 97 /* Non-ANSI names for compatibility */
 98 _CRT_NONSTDC_DEPRECATE(_memccpy) _CRTIMP void * __cdecl memccpy(_Out_writes_bytes_opt_(_Size) void * _Dst, _In_reads_bytes_opt_(_Size) const void * _Src, _In_ int _Val, _In_ size_t _Size);
 99 _Check_return_ _CRT_NONSTDC_DEPRECATE(_memicmp) _CRTIMP int __cdecl memicmp(_In_reads_bytes_opt_(_Size) const void * _Buf1, _In_reads_bytes_opt_(_Size) const void * _Buf2, _In_ size_t _Size);
100 #endif  /* !__STDC__ */
101 
102 #endif  /* _CRT_MEMORY_DEFINED */
103 #endif  /* RC_INVOKED */
104 
105 _Check_return_wat_ _CRTIMP_ALTERNATIVE errno_t __cdecl _strset_s(_Inout_updates_z_(_DstSize) char * _Dst, _In_ size_t _DstSize, _In_ int _Value);
106 __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1(errno_t, _strset_s, _Prepost_z_ char, _Dest, _In_ int, _Value)
107 __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1(char *, __RETURN_POLICY_DST, __EMPTY_DECLSPEC, _strset, _Inout_z_, char, _Dest, _In_ int, _Value)
108 #if __STDC_WANT_SECURE_LIB__
109 _Check_return_wat_ _CRTIMP_ALTERNATIVE errno_t __cdecl strcpy_s(_Out_writes_z_(_SizeInBytes) char * _Dst, _In_ rsize_t _SizeInBytes, _In_z_ const char * _Src);
110 #endif  /* __STDC_WANT_SECURE_LIB__ */
111 __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1(errno_t, strcpy_s, _Post_z_ char, _Dest, _In_z_ const char *, _Source)
112 __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1(char *, __RETURN_POLICY_DST, __EMPTY_DECLSPEC, strcpy, _Out_writes_z_(_String_length_(_Source) + 1), char, _Dest, _In_z_ const char *, _Source)
113 #if __STDC_WANT_SECURE_LIB__
114 _Check_return_wat_ _CRTIMP_ALTERNATIVE errno_t __cdecl strcat_s(_Inout_updates_z_(_SizeInBytes) char * _Dst, _In_ rsize_t _SizeInBytes, _In_z_ const char * _Src);
115 #endif  /* __STDC_WANT_SECURE_LIB__ */
116 __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1(errno_t, strcat_s, char, _Dest, _In_z_ const char *, _Source)
117 #ifndef RC_INVOKED
118 __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1(char *, __RETURN_POLICY_DST, __EMPTY_DECLSPEC, strcat, _Inout_updates_z_(_String_length_(_Dest) + _String_length_(_Source) + 1), char, _Dest, _In_z_ const char *, _Source)
119 #endif
120 _Check_return_ int     __cdecl strcmp(_In_z_ const char * _Str1, _In_z_ const char * _Str2);
121 _Check_return_ size_t  __cdecl strlen(_In_z_ const char * _Str);
122 _Check_return_ _CRTIMP
123 _When_(_MaxCount > _String_length_(_Str), _Post_satisfies_(return == _String_length_(_Str)))
124 _When_(_MaxCount <= _String_length_(_Str), _Post_satisfies_(return == _MaxCount))
125 size_t  __cdecl strnlen(_In_reads_or_z_(_MaxCount) const char * _Str, _In_ size_t _MaxCount);
126 #if __STDC_WANT_SECURE_LIB__ && !defined (__midl)
127 _Check_return_ static __inline
128 _When_(_MaxCount > _String_length_(_Str), _Post_satisfies_(return == _String_length_(_Str)))
129 _When_(_MaxCount <= _String_length_(_Str), _Post_satisfies_(return == _MaxCount))
130 size_t  __CRTDECL strnlen_s(_In_reads_or_z_(_MaxCount) const char * _Str, _In_ size_t _MaxCount)
131 {
132     return (_Str==0) ? 0 : strnlen(_Str, _MaxCount);
133 }
134 #endif  /* __STDC_WANT_SECURE_LIB__ && !defined (__midl) */
135 #if __STDC_WANT_SECURE_LIB__
136 _Check_return_wat_ _CRTIMP errno_t __cdecl memmove_s(_Out_writes_bytes_to_opt_(_DstSize,_MaxCount) void * _Dst, _In_ rsize_t _DstSize, _In_reads_bytes_opt_(_MaxCount) const void * _Src, _In_ rsize_t _MaxCount);
137 #endif  /* __STDC_WANT_SECURE_LIB__ */
138 
139 _CRTIMP _CRT_INSECURE_DEPRECATE_MEMORY(memmove_s) void *  __cdecl memmove(_Out_writes_bytes_all_opt_(_Size) void * _Dst, _In_reads_bytes_opt_(_Size) const void * _Src, _In_ size_t _Size);
140 
141 #if defined (_DEBUG) && defined (_CRTDBG_MAP_ALLOC)
142 #pragma push_macro("_strdup")
143 #undef _strdup
144 #endif  /* defined (_DEBUG) && defined (_CRTDBG_MAP_ALLOC) */
145 
146 _Check_return_ _CRTIMP char *  __cdecl _strdup(_In_opt_z_ const char * _Src);
147 
148 #if defined (_DEBUG) && defined (_CRTDBG_MAP_ALLOC)
149 #pragma pop_macro("_strdup")
150 #endif  /* defined (_DEBUG) && defined (_CRTDBG_MAP_ALLOC) */
151 
152 _Check_return_ _CRTIMP _CONST_RETURN char *  __cdecl strchr(_In_z_ const char * _Str, _In_ int _Val);
153 _Check_return_ _CRTIMP int     __cdecl _stricmp(_In_z_  const char * _Str1, _In_z_  const char * _Str2);
154 _Check_return_ _CRTIMP int     __cdecl _strcmpi(_In_z_  const char * _Str1, _In_z_  const char * _Str2);
155 _Check_return_ _CRTIMP int     __cdecl _stricmp_l(_In_z_  const char * _Str1, _In_z_  const char * _Str2, _In_opt_ _locale_t _Locale);
156 _Check_return_ _CRTIMP int     __cdecl strcoll(_In_z_  const char * _Str1, _In_z_  const  char * _Str2);
157 _Check_return_ _CRTIMP int     __cdecl _strcoll_l(_In_z_  const char * _Str1, _In_z_  const char * _Str2, _In_opt_ _locale_t _Locale);
158 _Check_return_ _CRTIMP int     __cdecl _stricoll(_In_z_  const char * _Str1, _In_z_  const char * _Str2);
159 _Check_return_ _CRTIMP int     __cdecl _stricoll_l(_In_z_  const char * _Str1, _In_z_  const char * _Str2, _In_opt_ _locale_t _Locale);
160 _Check_return_ _CRTIMP int     __cdecl _strncoll  (_In_reads_or_z_(_MaxCount) const char * _Str1, _In_reads_or_z_(_MaxCount) const char * _Str2, _In_ size_t _MaxCount);
161 _Check_return_ _CRTIMP int     __cdecl _strncoll_l(_In_reads_or_z_(_MaxCount) const char * _Str1, _In_reads_or_z_(_MaxCount) const char * _Str2, _In_ size_t _MaxCount, _In_opt_ _locale_t _Locale);
162 _Check_return_ _CRTIMP int     __cdecl _strnicoll (_In_reads_or_z_(_MaxCount) const char * _Str1, _In_reads_or_z_(_MaxCount) const char * _Str2, _In_ size_t _MaxCount);
163 _Check_return_ _CRTIMP int     __cdecl _strnicoll_l(_In_reads_or_z_(_MaxCount) const char * _Str1, _In_reads_or_z_(_MaxCount) const char * _Str2, _In_ size_t _MaxCount, _In_opt_ _locale_t _Locale);
164 _Check_return_ _CRTIMP size_t  __cdecl strcspn(_In_z_  const char * _Str, _In_z_  const char * _Control);
165 _Check_return_ _CRT_INSECURE_DEPRECATE(_strerror_s) _CRTIMP char *  __cdecl _strerror(_In_opt_z_ const char * _ErrMsg);
166 _Check_return_wat_ _CRTIMP errno_t __cdecl _strerror_s(_Out_writes_z_(_SizeInBytes) char * _Buf, _In_ size_t _SizeInBytes, _In_opt_z_ const char * _ErrMsg);
167 __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1(errno_t, _strerror_s, char, _Buffer, _In_opt_z_ const char *, _ErrorMessage)
168 _Check_return_ _CRT_INSECURE_DEPRECATE(strerror_s) _CRTIMP char *  __cdecl strerror(_In_ int);
169 #if __STDC_WANT_SECURE_LIB__
170 _Check_return_wat_ _CRTIMP errno_t __cdecl strerror_s(_Out_writes_z_(_SizeInBytes) char * _Buf, _In_ size_t _SizeInBytes, _In_ int _ErrNum);
171 #endif  /* __STDC_WANT_SECURE_LIB__ */
172 __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1(errno_t, strerror_s, char, _Buffer, _In_ int, _ErrorMessage)
173 _Check_return_wat_ _CRTIMP errno_t __cdecl _strlwr_s(_Inout_updates_z_(_Size) char * _Str, _In_ size_t _Size);
174 __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0(errno_t, _strlwr_s, _Prepost_z_ char, _String)
175 __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0(char *, __RETURN_POLICY_DST, _CRTIMP, _strlwr, _Inout_z_, char, _String)
176 _Check_return_wat_ _CRTIMP errno_t __cdecl _strlwr_s_l(_Inout_updates_z_(_Size) char * _Str, _In_ size_t _Size, _In_opt_ _locale_t _Locale);
177 __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1(errno_t, _strlwr_s_l, _Prepost_z_ char, _String, _In_opt_ _locale_t, _Locale)
178 __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX(char *, __RETURN_POLICY_DST, _CRTIMP, _strlwr_l, _strlwr_s_l, _Inout_updates_z_(_Size) char, _Inout_z_, char, _String, _In_opt_ _locale_t, _Locale)
179 #if __STDC_WANT_SECURE_LIB__
180 _Check_return_wat_ _CRTIMP_ALTERNATIVE errno_t __cdecl strncat_s(_Inout_updates_z_(_SizeInBytes) char * _Dst, _In_ rsize_t _SizeInBytes, _In_reads_or_z_(_MaxCount) const char * _Src, _In_ rsize_t _MaxCount);
181 #endif  /* __STDC_WANT_SECURE_LIB__ */
182 __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2(errno_t, strncat_s, _Prepost_z_ char, _Dest, _In_reads_or_z_(_Count) const char *, _Source, _In_ size_t, _Count)
183 #pragma warning(push)
184 #pragma warning(disable:6059)
185 /* prefast noise VSW 489802 */
186 __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_EX(char *, __RETURN_POLICY_DST, _CRTIMP, strncat, strncat_s, _Inout_updates_z_(_Size) char, _Inout_updates_z_(_Count), char, _Dest, _In_reads_or_z_(_Count) const char *, _Source, _In_ size_t, _Count)
187 #pragma warning(pop)
188 _Check_return_ _CRTIMP int     __cdecl strncmp(_In_reads_or_z_(_MaxCount) const char * _Str1, _In_reads_or_z_(_MaxCount) const char * _Str2, _In_ size_t _MaxCount);
189 _Check_return_ _CRTIMP int     __cdecl _strnicmp(_In_reads_or_z_(_MaxCount) const char * _Str1, _In_reads_or_z_(_MaxCount) const char * _Str2, _In_ size_t _MaxCount);
190 _Check_return_ _CRTIMP int     __cdecl _strnicmp_l(_In_reads_or_z_(_MaxCount) const char * _Str1, _In_reads_or_z_(_MaxCount) const char * _Str2, _In_ size_t _MaxCount, _In_opt_ _locale_t _Locale);
191 #if __STDC_WANT_SECURE_LIB__
192 _Check_return_wat_ _CRTIMP_ALTERNATIVE errno_t __cdecl strncpy_s(_Out_writes_z_(_SizeInBytes) char * _Dst, _In_ rsize_t _SizeInBytes, _In_reads_or_z_(_MaxCount) const char * _Src, _In_ rsize_t _MaxCount);
193 #endif  /* __STDC_WANT_SECURE_LIB__ */
194 __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2(errno_t, strncpy_s, char, _Dest, _In_reads_or_z_(_Count) const char *, _Source, _In_ size_t, _Count)
195 __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_EX(char *, __RETURN_POLICY_DST, _CRTIMP, strncpy, strncpy_s, _Out_writes_z_(_Size) char, _Out_writes_(_Count) _Post_maybez_, char, _Dest, _In_reads_or_z_(_Count) const char *, _Source, _In_ size_t, _Count)
196 _Check_return_wat_ _CRTIMP_ALTERNATIVE errno_t __cdecl _strnset_s(_Inout_updates_z_(_SizeInBytes) char * _Str, _In_ size_t _SizeInBytes, _In_ int _Val, _In_ size_t _MaxCount);
197 __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2(errno_t, _strnset_s, _Prepost_z_ char, _Dest, _In_ int, _Val, _In_ size_t, _Count)
198 __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_EX(char *, __RETURN_POLICY_DST, _CRTIMP, _strnset, _strnset_s, _Inout_updates_z_(_Size) char, _Inout_updates_z_(_Count), char, _Dest, _In_ int, _Val, _In_ size_t, _Count)
199 _Check_return_ _CRTIMP _CONST_RETURN char *  __cdecl strpbrk(_In_z_ const char * _Str, _In_z_ const char * _Control);
200 _Check_return_ _CRTIMP _CONST_RETURN char *  __cdecl strrchr(_In_z_ const char * _Str, _In_ int _Ch);
201 _CRTIMP char *  __cdecl _strrev(_Inout_z_ char * _Str);
202 _Check_return_ _CRTIMP size_t  __cdecl strspn(_In_z_ const char * _Str, _In_z_ const char * _Control);
203 _Check_return_ _Ret_maybenull_ _CRTIMP _CONST_RETURN char *  __cdecl strstr(_In_z_ const char * _Str, _In_z_ const char * _SubStr);
204 _Check_return_ _CRT_INSECURE_DEPRECATE(strtok_s) _CRTIMP char *  __cdecl strtok(_Inout_opt_z_ char * _Str, _In_z_ const char * _Delim);
205 #if __STDC_WANT_SECURE_LIB__
206 _Check_return_ _CRTIMP_ALTERNATIVE char *  __cdecl strtok_s(_Inout_opt_z_ char * _Str, _In_z_ const char * _Delim, _Inout_ _Deref_prepost_opt_z_ char ** _Context);
207 #endif  /* __STDC_WANT_SECURE_LIB__ */
208 _Check_return_wat_ _CRTIMP errno_t __cdecl _strupr_s(_Inout_updates_z_(_Size) char * _Str, _In_ size_t _Size);
209 __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0(errno_t, _strupr_s, _Prepost_z_ char, _String)
210 __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0(char *, __RETURN_POLICY_DST, _CRTIMP, _strupr, _Inout_z_, char, _String)
211 _Check_return_wat_ _CRTIMP errno_t __cdecl _strupr_s_l(_Inout_updates_z_(_Size) char * _Str, _In_ size_t _Size, _locale_t _Locale);
212 __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1(errno_t, _strupr_s_l, _Prepost_z_ char, _String, _locale_t, _Locale)
213 __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX(char *, __RETURN_POLICY_DST, _CRTIMP, _strupr_l, _strupr_s_l, _Inout_updates_z_(_Size) char, _Inout_z_, char, _String, _In_opt_ _locale_t, _Locale)
214 _Check_return_opt_ _CRTIMP size_t  __cdecl strxfrm (_Out_writes_opt_(_MaxCount) _Post_maybez_ char * _Dst, _In_z_ const char * _Src, _In_ size_t _MaxCount);
215 _Check_return_opt_ _CRTIMP size_t  __cdecl _strxfrm_l(_Out_writes_opt_(_MaxCount) _Post_maybez_ char * _Dst, _In_z_ const char * _Src, _In_ size_t _MaxCount, _In_opt_ _locale_t _Locale);
216 
217 #ifdef __cplusplus
218 extern "C++" {
219 #ifndef _CPP_NARROW_INLINES_DEFINED
220 #define _CPP_NARROW_INLINES_DEFINED
221 _Check_return_ inline char * __CRTDECL strchr(_In_z_ char * _Str, _In_ int _Ch)
222         { return (char*)strchr((const char*)_Str, _Ch); }
223 _Check_return_ inline char * __CRTDECL strpbrk(_In_z_ char * _Str, _In_z_ const char * _Control)
224         { return (char*)strpbrk((const char*)_Str, _Control); }
225 _Check_return_ inline char * __CRTDECL strrchr(_In_z_ char * _Str, _In_ int _Ch)
226         { return (char*)strrchr((const char*)_Str, _Ch); }
227 _Check_return_ _Ret_maybenull_ inline char * __CRTDECL strstr(_In_z_ char * _Str, _In_z_ const char * _SubStr)
228         { return (char*)strstr((const char*)_Str, _SubStr); }
229 #endif  /* _CPP_NARROW_INLINES_DEFINED */
230 #ifndef _CPP_MEMCHR_DEFINED
231 #define _CPP_MEMCHR_DEFINED
232 _Check_return_ inline void * __CRTDECL memchr(_In_reads_bytes_opt_(_N) void * _Pv, _In_ int _C, _In_ size_t _N)
233         { return (void*)memchr((const void*)_Pv, _C, _N); }
234 #endif  /* _CPP_MEMCHR_DEFINED */
235 }
236 #endif  /* __cplusplus */
237 
238 #if !__STDC__
239 
240 #if defined (_DEBUG) && defined (_CRTDBG_MAP_ALLOC)
241 #pragma push_macro("strdup")
242 #undef strdup
243 #endif  /* defined (_DEBUG) && defined (_CRTDBG_MAP_ALLOC) */
244 
245 _Check_return_ _CRT_NONSTDC_DEPRECATE(_strdup) _CRTIMP char * __cdecl strdup(_In_opt_z_ const char * _Src);
246 
247 #if defined (_DEBUG) && defined (_CRTDBG_MAP_ALLOC)
248 #pragma pop_macro("strdup")
249 #endif  /* defined (_DEBUG) && defined (_CRTDBG_MAP_ALLOC) */
250 
251 /* prototypes for oldnames.lib functions */
252 _Check_return_ _CRT_NONSTDC_DEPRECATE(_strcmpi) _CRTIMP int __cdecl strcmpi(_In_z_ const char * _Str1, _In_z_ const char * _Str2);
253 _Check_return_ _CRT_NONSTDC_DEPRECATE(_stricmp) _CRTIMP int __cdecl stricmp(_In_z_ const char * _Str1, _In_z_ const char * _Str2);
254 _CRT_NONSTDC_DEPRECATE(_strlwr) _CRTIMP char * __cdecl strlwr(_Inout_z_ char * _Str);
255 _Check_return_ _CRT_NONSTDC_DEPRECATE(_strnicmp) _CRTIMP int __cdecl strnicmp(_In_reads_or_z_(_MaxCount) const char * _Str1, _In_reads_or_z_(_MaxCount) const char * _Str, _In_ size_t _MaxCount);
256 _CRT_NONSTDC_DEPRECATE(_strnset) _CRTIMP char * __cdecl strnset(_Inout_updates_z_(_MaxCount) char * _Str, _In_ int _Val, _In_ size_t _MaxCount);
257 _CRT_NONSTDC_DEPRECATE(_strrev) _CRTIMP char * __cdecl strrev(_Inout_z_ char * _Str);
258 _CRT_NONSTDC_DEPRECATE(_strset)         char * __cdecl strset(_Inout_z_ char * _Str, _In_ int _Val);
259 _CRT_NONSTDC_DEPRECATE(_strupr) _CRTIMP char * __cdecl strupr(_Inout_z_ char * _Str);
260 
261 #endif  /* !__STDC__ */
262 
263 
264 #ifndef _WSTRING_DEFINED
265 
266 /* wide function prototypes, also declared in wchar.h  */
267 
268 #if defined (_DEBUG) && defined (_CRTDBG_MAP_ALLOC)
269 #pragma push_macro("_wcsdup")
270 #undef _wcsdup
271 #endif  /* defined (_DEBUG) && defined (_CRTDBG_MAP_ALLOC) */
272 
273 _Check_return_ _CRTIMP wchar_t * __cdecl _wcsdup(_In_z_ const wchar_t * _Str);
274 
275 #if defined (_DEBUG) && defined (_CRTDBG_MAP_ALLOC)
276 #pragma pop_macro("_wcsdup")
277 #endif  /* defined (_DEBUG) && defined (_CRTDBG_MAP_ALLOC) */
278 
279 #if __STDC_WANT_SECURE_LIB__
280 _Check_return_wat_ _CRTIMP_ALTERNATIVE errno_t __cdecl wcscat_s(_Inout_updates_z_(_SizeInWords) wchar_t * _Dst, _In_ rsize_t _SizeInWords, _In_z_ const wchar_t * _Src);
281 #endif  /* __STDC_WANT_SECURE_LIB__ */
282 __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1(errno_t, wcscat_s, wchar_t, _Dest, _In_z_ const wchar_t *, _Source)
283 #ifndef RC_INVOKED
284 __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1(wchar_t *, __RETURN_POLICY_DST, _CRTIMP, wcscat, _Inout_updates_z_(_String_length_(_Dest) + _String_length_(_Source) + 1), wchar_t, _Dest, _In_z_ const wchar_t *, _Source)
285 #endif
286 _Check_return_
287 _When_(return != NULL, _Ret_range_(_Str, _Str+_String_length_(_Str)-1))
288 _CRTIMP _CONST_RETURN wchar_t * __cdecl wcschr(_In_z_ const wchar_t * _Str, wchar_t _Ch);
289 _Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t * _Str1, _In_z_ const wchar_t * _Str2);
290 #if __STDC_WANT_SECURE_LIB__
291 _Check_return_wat_ _CRTIMP_ALTERNATIVE errno_t __cdecl wcscpy_s(_Out_writes_z_(_SizeInWords) wchar_t * _Dst, _In_ rsize_t _SizeInWords, _In_z_ const wchar_t * _Src);
292 #endif  /* __STDC_WANT_SECURE_LIB__ */
293 __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1(errno_t, wcscpy_s, wchar_t, _Dest, _In_z_ const wchar_t *, _Source)
294 __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1(wchar_t *, __RETURN_POLICY_DST, _CRTIMP, wcscpy, _Out_writes_z_(_String_length_(_Source) + 1), wchar_t, _Dest, _In_z_ const wchar_t *, _Source)
295 _Check_return_ _CRTIMP size_t __cdecl wcscspn(_In_z_ const wchar_t * _Str, _In_z_ const wchar_t * _Control);
296 _Check_return_ _CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t * _Str);
297 _Check_return_ _CRTIMP
298 _When_(_MaxCount > _String_length_(_Src), _Post_satisfies_(return == _String_length_(_Src)))
299 _When_(_MaxCount <= _String_length_(_Src), _Post_satisfies_(return == _MaxCount))
300 size_t __cdecl wcsnlen(_In_reads_or_z_(_MaxCount) const wchar_t * _Src, _In_ size_t _MaxCount);
301 #if __STDC_WANT_SECURE_LIB__ && !defined (__midl)
302 _Check_return_ static __inline
303 _When_(_MaxCount > _String_length_(_Src), _Post_satisfies_(return == _String_length_(_Src)))
304 _When_(_MaxCount <= _String_length_(_Src), _Post_satisfies_(return == _MaxCount))
305 size_t __CRTDECL wcsnlen_s(_In_reads_or_z_(_MaxCount) const wchar_t * _Src, _In_ size_t _MaxCount)
306 {
307     return (_Src == NULL) ? 0 : wcsnlen(_Src, _MaxCount);
308 }
309 #endif  /* __STDC_WANT_SECURE_LIB__ && !defined (__midl) */
310 #if __STDC_WANT_SECURE_LIB__
311 _Check_return_wat_ _CRTIMP_ALTERNATIVE errno_t __cdecl wcsncat_s(_Inout_updates_z_(_SizeInWords) wchar_t * _Dst, _In_ rsize_t _SizeInWords, _In_reads_or_z_(_MaxCount) const wchar_t * _Src, _In_ rsize_t _MaxCount);
312 #endif  /* __STDC_WANT_SECURE_LIB__ */
313 __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2(errno_t, wcsncat_s, _Prepost_z_ wchar_t, _Dest, _In_reads_or_z_(_Count) const wchar_t *, _Source, _In_ size_t, _Count)
314 #pragma warning(push)
315 #pragma warning(disable:6059)
316 __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_EX(wchar_t *, __RETURN_POLICY_DST, _CRTIMP, wcsncat, wcsncat_s, _Inout_updates_z_(_Size) wchar_t, _Inout_updates_z_(_Count), wchar_t, _Dest, _In_reads_or_z_(_Count) const wchar_t *, _Source, _In_ size_t, _Count)
317 #pragma warning(pop)
318 _Check_return_ _CRTIMP int __cdecl wcsncmp(_In_reads_or_z_(_MaxCount) const wchar_t * _Str1, _In_reads_or_z_(_MaxCount) const wchar_t * _Str2, _In_ size_t _MaxCount);
319 #if __STDC_WANT_SECURE_LIB__
320 _Check_return_wat_ _CRTIMP_ALTERNATIVE errno_t __cdecl wcsncpy_s(_Out_writes_z_(_SizeInWords) wchar_t * _Dst, _In_ rsize_t _SizeInWords, _In_reads_or_z_(_MaxCount) const wchar_t * _Src, _In_ rsize_t _MaxCount);
321 #endif  /* __STDC_WANT_SECURE_LIB__ */
322 __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2(errno_t, wcsncpy_s, wchar_t, _Dest, _In_reads_or_z_(_Count) const wchar_t *, _Source, _In_ size_t, _Count)
323 __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_EX(wchar_t *, __RETURN_POLICY_DST, _CRTIMP, wcsncpy, wcsncpy_s, _Pre_notnull_ _Post_maybez_ wchar_t, _Out_writes_(_Count) _Post_maybez_, wchar_t, _Dest, _In_reads_or_z_(_Count) const wchar_t *, _Source, _In_ size_t, _Count)
324 _Check_return_ _CRTIMP _CONST_RETURN wchar_t * __cdecl wcspbrk(_In_z_ const wchar_t * _Str, _In_z_ const wchar_t * _Control);
325 _Check_return_ _CRTIMP _CONST_RETURN wchar_t * __cdecl wcsrchr(_In_z_ const wchar_t * _Str, _In_ wchar_t _Ch);
326 _Check_return_ _CRTIMP size_t __cdecl wcsspn(_In_z_ const wchar_t * _Str, _In_z_ const wchar_t * _Control);
327 _Check_return_ _Ret_maybenull_
328 _When_(return != NULL, _Ret_range_(_Str, _Str+_String_length_(_Str)-1))
329 _CRTIMP _CONST_RETURN wchar_t * __cdecl wcsstr(_In_z_ const wchar_t * _Str, _In_z_ const wchar_t * _SubStr);
330 _Check_return_ _CRT_INSECURE_DEPRECATE(wcstok_s) _CRTIMP wchar_t * __cdecl wcstok(_Inout_opt_z_ wchar_t * _Str, _In_z_ const wchar_t * _Delim);
331 #if __STDC_WANT_SECURE_LIB__
332 _Check_return_ _CRTIMP_ALTERNATIVE wchar_t * __cdecl wcstok_s(_Inout_opt_z_ wchar_t * _Str, _In_z_ const wchar_t * _Delim, _Inout_ _Deref_prepost_opt_z_ wchar_t ** _Context);
333 #endif  /* __STDC_WANT_SECURE_LIB__ */
334 _Check_return_ _CRT_INSECURE_DEPRECATE(_wcserror_s) _CRTIMP wchar_t * __cdecl _wcserror(_In_ int _ErrNum);
335 _Check_return_wat_ _CRTIMP errno_t __cdecl _wcserror_s(_Out_writes_opt_z_(_SizeInWords) wchar_t * _Buf, _In_ size_t _SizeInWords, _In_ int _ErrNum);
336 __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1(errno_t, _wcserror_s, wchar_t, _Buffer, _In_ int, _Error)
337 _Check_return_ _CRT_INSECURE_DEPRECATE(__wcserror_s) _CRTIMP wchar_t * __cdecl __wcserror(_In_opt_z_ const wchar_t * _Str);
338 _Check_return_wat_ _CRTIMP errno_t __cdecl __wcserror_s(_Out_writes_opt_z_(_SizeInWords) wchar_t * _Buffer, _In_ size_t _SizeInWords, _In_z_ const wchar_t * _ErrMsg);
339 __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1(errno_t, __wcserror_s, wchar_t, _Buffer, _In_z_ const wchar_t *, _ErrorMessage)
340 
341 _Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t * _Str1, _In_z_ const wchar_t * _Str2);
342 _Check_return_ _CRTIMP int __cdecl _wcsicmp_l(_In_z_ const wchar_t * _Str1, _In_z_ const wchar_t * _Str2, _In_opt_ _locale_t _Locale);
343 _Check_return_ _CRTIMP int __cdecl _wcsnicmp(_In_reads_or_z_(_MaxCount) const wchar_t * _Str1, _In_reads_or_z_(_MaxCount) const wchar_t * _Str2, _In_ size_t _MaxCount);
344 _Check_return_ _CRTIMP int __cdecl _wcsnicmp_l(_In_reads_or_z_(_MaxCount) const wchar_t * _Str1, _In_reads_or_z_(_MaxCount) const wchar_t * _Str2, _In_ size_t _MaxCount, _In_opt_ _locale_t _Locale);
345 _Check_return_wat_ _CRTIMP_ALTERNATIVE errno_t __cdecl _wcsnset_s(_Inout_updates_z_(_SizeInWords) wchar_t * _Dst, _In_ size_t _SizeInWords, _In_ wchar_t _Val, _In_ size_t _MaxCount);
346 __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2(errno_t, _wcsnset_s, _Prepost_z_ wchar_t, _Dst, wchar_t, _Val, _In_ size_t, _MaxCount)
347 __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_EX(wchar_t *, __RETURN_POLICY_DST, _CRTIMP, _wcsnset, _wcsnset_s, _Inout_updates_z_(_Size) wchar_t, _Inout_updates_z_(_MaxCount), wchar_t, _Str, wchar_t, _Val, _In_ size_t, _MaxCount)
348 _CRTIMP wchar_t * __cdecl _wcsrev(_Inout_z_ wchar_t * _Str);
349 _Check_return_wat_ _CRTIMP_ALTERNATIVE errno_t __cdecl _wcsset_s(_Inout_updates_z_(_SizeInWords) wchar_t * _Dst, _In_ size_t _SizeInWords, _In_ wchar_t _Value);
350 __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1(errno_t, _wcsset_s, _Prepost_z_ wchar_t, _Str, wchar_t, _Val)
351 __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX(wchar_t *, __RETURN_POLICY_DST, _CRTIMP, _wcsset, _wcsset_s, _Inout_updates_z_(_Size) wchar_t, _Inout_z_, wchar_t, _Str, wchar_t, _Val)
352 
353 _Check_return_wat_ _CRTIMP errno_t __cdecl _wcslwr_s(_Inout_updates_z_(_SizeInWords) wchar_t * _Str, _In_ size_t _SizeInWords);
354 __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0(errno_t, _wcslwr_s, _Prepost_z_ wchar_t, _String)
355 __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0(wchar_t *, __RETURN_POLICY_DST, _CRTIMP, _wcslwr, _Inout_z_, wchar_t, _String)
356 _Check_return_wat_ _CRTIMP errno_t __cdecl _wcslwr_s_l(_Inout_updates_z_(_SizeInWords) wchar_t * _Str, _In_ size_t _SizeInWords, _In_opt_ _locale_t _Locale);
357 __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1(errno_t, _wcslwr_s_l, _Prepost_z_ wchar_t, _String, _In_opt_ _locale_t, _Locale)
358 __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX(wchar_t *, __RETURN_POLICY_DST, _CRTIMP, _wcslwr_l, _wcslwr_s_l, _Inout_updates_z_(_Size) wchar_t, _Inout_z_, wchar_t, _String, _In_opt_ _locale_t, _Locale)
359 _Check_return_wat_ _CRTIMP errno_t __cdecl _wcsupr_s(_Inout_updates_z_(_Size) wchar_t * _Str, _In_ size_t _Size);
360 __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0(errno_t, _wcsupr_s, _Prepost_z_ wchar_t, _String)
361 __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0(wchar_t *, __RETURN_POLICY_DST, _CRTIMP, _wcsupr, _Inout_z_, wchar_t, _String)
362 _Check_return_wat_ _CRTIMP errno_t __cdecl _wcsupr_s_l(_Inout_updates_z_(_Size) wchar_t * _Str, _In_ size_t _Size, _In_opt_ _locale_t _Locale);
363 __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1(errno_t, _wcsupr_s_l, _Prepost_z_ wchar_t, _String, _In_opt_ _locale_t, _Locale)
364 __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX(wchar_t *, __RETURN_POLICY_DST, _CRTIMP, _wcsupr_l, _wcsupr_s_l, _Inout_updates_z_(_Size) wchar_t, _Inout_z_, wchar_t, _String, _In_opt_ _locale_t, _Locale)
365 _Check_return_opt_ _CRTIMP size_t __cdecl wcsxfrm(_Out_writes_opt_(_MaxCount) _Post_maybez_ wchar_t * _Dst, _In_z_ const wchar_t * _Src, _In_ size_t _MaxCount);
366 _Check_return_opt_ _CRTIMP size_t __cdecl _wcsxfrm_l(_Out_writes_opt_(_MaxCount) _Post_maybez_ wchar_t * _Dst, _In_z_ const wchar_t *_Src, _In_ size_t _MaxCount, _In_opt_ _locale_t _Locale);
367 _Check_return_ _CRTIMP int __cdecl wcscoll(_In_z_ const wchar_t * _Str1, _In_z_ const wchar_t * _Str2);
368 _Check_return_ _CRTIMP int __cdecl _wcscoll_l(_In_z_ const wchar_t * _Str1, _In_z_ const wchar_t * _Str2, _In_opt_ _locale_t _Locale);
369 _Check_return_ _CRTIMP int __cdecl _wcsicoll(_In_z_ const wchar_t * _Str1, _In_z_ const wchar_t * _Str2);
370 _Check_return_ _CRTIMP int __cdecl _wcsicoll_l(_In_z_ const wchar_t * _Str1, _In_z_ const wchar_t *_Str2, _In_opt_ _locale_t _Locale);
371 _Check_return_ _CRTIMP int __cdecl _wcsncoll(_In_reads_or_z_(_MaxCount) const wchar_t * _Str1, _In_reads_or_z_(_MaxCount) const wchar_t * _Str2, _In_ size_t _MaxCount);
372 _Check_return_ _CRTIMP int __cdecl _wcsncoll_l(_In_reads_or_z_(_MaxCount) const wchar_t * _Str1, _In_reads_or_z_(_MaxCount) const wchar_t * _Str2, _In_ size_t _MaxCount, _In_opt_ _locale_t _Locale);
373 _Check_return_ _CRTIMP int __cdecl _wcsnicoll(_In_reads_or_z_(_MaxCount) const wchar_t * _Str1, _In_reads_or_z_(_MaxCount) const wchar_t * _Str2, _In_ size_t _MaxCount);
374 _Check_return_ _CRTIMP int __cdecl _wcsnicoll_l(_In_reads_or_z_(_MaxCount) const wchar_t * _Str1, _In_reads_or_z_(_MaxCount) const wchar_t * _Str2, _In_ size_t _MaxCount, _In_opt_ _locale_t _Locale);
375 
376 #ifdef __cplusplus
377 #ifndef _CPP_WIDE_INLINES_DEFINED
378 #define _CPP_WIDE_INLINES_DEFINED
379 extern "C++" {
380 _Check_return_
381 _When_(return != NULL, _Ret_range_(_Str, _Str+_String_length_(_Str)-1))
382         inline wchar_t * __CRTDECL wcschr(_In_z_ wchar_t *_Str, wchar_t _Ch)
383         {return ((wchar_t *)wcschr((const wchar_t *)_Str, _Ch)); }
384 _Check_return_ inline wchar_t * __CRTDECL wcspbrk(_In_z_ wchar_t *_Str, _In_z_ const wchar_t *_Control)
385         {return ((wchar_t *)wcspbrk((const wchar_t *)_Str, _Control)); }
386 _Check_return_ inline wchar_t * __CRTDECL wcsrchr(_In_z_ wchar_t *_Str, _In_ wchar_t _Ch)
387         {return ((wchar_t *)wcsrchr((const wchar_t *)_Str, _Ch)); }
388 _Check_return_ _Ret_maybenull_
389 _When_(return != NULL, _Ret_range_(_Str, _Str+_String_length_(_Str)-1))
390         inline wchar_t * __CRTDECL wcsstr(_In_z_ wchar_t *_Str, _In_z_ const wchar_t *_SubStr)
391         {return ((wchar_t *)wcsstr((const wchar_t *)_Str, _SubStr)); }
392 }
393 #endif  /* _CPP_WIDE_INLINES_DEFINED */
394 #endif  /* __cplusplus */
395 
396 #if !__STDC__
397 
398 #if defined (_DEBUG) && defined (_CRTDBG_MAP_ALLOC)
399 #pragma push_macro("wcsdup")
400 #undef wcsdup
401 #endif  /* defined (_DEBUG) && defined (_CRTDBG_MAP_ALLOC) */
402 
403 _Check_return_ _CRT_NONSTDC_DEPRECATE(_wcsdup) _CRTIMP wchar_t * __cdecl wcsdup(_In_z_ const wchar_t * _Str);
404 
405 #if defined (_DEBUG) && defined (_CRTDBG_MAP_ALLOC)
406 #pragma pop_macro("wcsdup")
407 #endif  /* defined (_DEBUG) && defined (_CRTDBG_MAP_ALLOC) */
408 
409 /* old names */
410 #define wcswcs wcsstr
411 
412 /* prototypes for oldnames.lib functions */
413 _Check_return_ _CRT_NONSTDC_DEPRECATE(_wcsicmp) _CRTIMP int __cdecl wcsicmp(_In_z_ const wchar_t * _Str1, _In_z_ const wchar_t * _Str2);
414 _Check_return_ _CRT_NONSTDC_DEPRECATE(_wcsnicmp) _CRTIMP int __cdecl wcsnicmp(_In_reads_or_z_(_MaxCount) const wchar_t * _Str1, _In_reads_or_z_(_MaxCount) const wchar_t * _Str2, _In_ size_t _MaxCount);
415 _CRT_NONSTDC_DEPRECATE(_wcsnset) _CRTIMP wchar_t * __cdecl wcsnset(_Inout_updates_z_(_MaxCount) wchar_t * _Str, _In_ wchar_t _Val, _In_ size_t _MaxCount);
416 _CRT_NONSTDC_DEPRECATE(_wcsrev) _CRTIMP wchar_t * __cdecl wcsrev(_Inout_z_ wchar_t * _Str);
417 _CRT_NONSTDC_DEPRECATE(_wcsset) _CRTIMP wchar_t * __cdecl wcsset(_Inout_z_ wchar_t * _Str, wchar_t _Val);
418 _CRT_NONSTDC_DEPRECATE(_wcslwr) _CRTIMP wchar_t * __cdecl wcslwr(_Inout_z_ wchar_t * _Str);
419 _CRT_NONSTDC_DEPRECATE(_wcsupr) _CRTIMP wchar_t * __cdecl wcsupr(_Inout_z_ wchar_t * _Str);
420 _Check_return_ _CRT_NONSTDC_DEPRECATE(_wcsicoll) _CRTIMP int __cdecl wcsicoll(_In_z_ const wchar_t * _Str1, _In_z_ const wchar_t * _Str2);
421 
422 #endif  /* !__STDC__ */
423 
424 #define _WSTRING_DEFINED
425 #endif  /* _WSTRING_DEFINED */
426 
427 #ifdef _CRTBLD
428 _Check_return_ int __cdecl __ascii_memicmp(_In_reads_bytes_opt_(_Size) const void * _Buf1, _In_reads_bytes_opt_(_Size) const void * _Buf2, _In_ size_t _Size);
429 _Check_return_ int __cdecl __ascii_stricmp(_In_z_ const char * _Str1, _In_z_ const char * _Str2);
430 _Check_return_ int __cdecl __ascii_strnicmp(_In_reads_or_z_(_MaxCount) const char * _Str1, _In_reads_or_z_(_MaxCount) const char * _Str2, _In_ size_t _MaxCount);
431 #endif  /* _CRTBLD */
432 
433 #ifdef __cplusplus
434 }
435 #endif  /* __cplusplus */
436 
437 #endif  /* _INC_STRING */

cstring

// cstring standard header
#pragma once
#ifndef _CSTRING_
#define _CSTRING_
#include <yvals.h>

#ifdef _STD_USING
 #undef _STD_USING
  #include <string.h>
 #define _STD_USING

#else /* _STD_USING */
 #include <string.h>
#endif /* _STD_USING */

 #if _GLOBAL_USING && !defined(RC_INVOKED)
_STD_BEGIN
using _CSTD size_t; using _CSTD memchr; using _CSTD memcmp;
using _CSTD memcpy; using _CSTD memmove; using _CSTD memset;
using _CSTD strcat; using _CSTD strchr; using _CSTD strcmp;
using _CSTD strcoll; using _CSTD strcpy; using _CSTD strcspn;
using _CSTD strerror; using _CSTD strlen; using _CSTD strncat;
using _CSTD strncmp; using _CSTD strncpy; using _CSTD strpbrk;
using _CSTD strrchr; using _CSTD strspn; using _CSTD strstr;
using _CSTD strtok; using _CSTD strxfrm;
_STD_END
 #endif /* _GLOBAL_USING */

#endif /* _CSTRING_ */

/*
 * Copyright (c) 1992-2013 by P.J. Plauger.  ALL RIGHTS RESERVED.
 * Consult your license regarding permissions and restrictions.
V6.40:0009 */

原文链接: https://www.cnblogs.com/Lunais/p/6062609.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/243874

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 下午11:40
下一篇 2023年2月13日 下午11:42

相关推荐