266 lines
5.7 KiB
C++
266 lines
5.7 KiB
C++
|
|
#ifndef _LIB_ANSISTRING_H_
|
|||
|
|
#define _LIB_ANSISTRING_H_
|
|||
|
|
|
|||
|
|
/******************************************************************
|
|||
|
|
*
|
|||
|
|
*
|
|||
|
|
* $ UCS2<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> $
|
|||
|
|
*
|
|||
|
|
* - <EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> -
|
|||
|
|
*
|
|||
|
|
* ʵ<EFBFBD><EFBFBD>UCS<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UCS2<EFBFBD>ַ<EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
*****************************************************************/
|
|||
|
|
#include <stdlib.h>
|
|||
|
|
#include <string.h>
|
|||
|
|
|
|||
|
|
namespace string
|
|||
|
|
{
|
|||
|
|
class AnsiString
|
|||
|
|
{
|
|||
|
|
public:
|
|||
|
|
typedef char CharType;
|
|||
|
|
typedef char* RawStrType;
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
char* m_sStr;
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
static const char* EMPTY_STR;
|
|||
|
|
|
|||
|
|
protected:
|
|||
|
|
/*
|
|||
|
|
realloc <EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>롢<EFBFBD>ͷź<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷţ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ̳д˺<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ptr: <EFBFBD><EFBFBD><EFBFBD>롢<EFBFBD>ͷŵ<EFBFBD>ָ<EFBFBD><EFBFBD>
|
|||
|
|
newsize: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>ͷ<EFBFBD>ptrָ<EFBFBD><EFBFBD>
|
|||
|
|
<EFBFBD><EFBFBD>ptr<EFBFBD><EFBFBD>newsize<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ptr<EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
|||
|
|
*/
|
|||
|
|
virtual void* alloc(void* ptr, size_t newsize)
|
|||
|
|
{
|
|||
|
|
if ( newsize == 0 )
|
|||
|
|
{
|
|||
|
|
if ( ptr ) free( ptr );
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
return realloc( ptr, newsize );
|
|||
|
|
}
|
|||
|
|
/*
|
|||
|
|
setData <EFBFBD>趨<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
data: ָ<EFBFBD><EFBFBD>ԭʼ<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
inline void setData(const char* data)
|
|||
|
|
{
|
|||
|
|
if ( data )
|
|||
|
|
{
|
|||
|
|
size_t size = strlen(data) + 1;
|
|||
|
|
size *= sizeof(*data);
|
|||
|
|
m_sStr = (char*)alloc( m_sStr, size );
|
|||
|
|
memcpy( m_sStr, data, size );
|
|||
|
|
}
|
|||
|
|
else m_sStr = (char*)alloc( m_sStr, 0 );
|
|||
|
|
}
|
|||
|
|
/*
|
|||
|
|
catData <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
data: ָ<EFBFBD><EFBFBD>ԭʼ<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>룬<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻᱻ<EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
inline void catData(const char* data)
|
|||
|
|
{
|
|||
|
|
if ( data )
|
|||
|
|
{
|
|||
|
|
size_t cat_size = strlen(data);
|
|||
|
|
size_t cur_size = length();
|
|||
|
|
m_sStr = (char*)alloc( m_sStr, (cat_size + cur_size + 1) * sizeof(*data) );
|
|||
|
|
memcpy( &m_sStr[cur_size], data, (cat_size + 1) * sizeof(*data) );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
public:
|
|||
|
|
/*
|
|||
|
|
?<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
AnsiString()
|
|||
|
|
{
|
|||
|
|
m_sStr = NULL;
|
|||
|
|
}
|
|||
|
|
AnsiString(const char* data)
|
|||
|
|
{
|
|||
|
|
m_sStr = NULL;
|
|||
|
|
setData( data );
|
|||
|
|
}
|
|||
|
|
AnsiString(const AnsiString &str)
|
|||
|
|
{
|
|||
|
|
m_sStr = NULL;
|
|||
|
|
setData( str.m_sStr );
|
|||
|
|
}
|
|||
|
|
virtual ~AnsiString()
|
|||
|
|
{
|
|||
|
|
setData( NULL );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
/* <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ(const char*)<29><>
|
|||
|
|
ע<EFBFBD>⣺ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ΪNULL<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>᷵<EFBFBD><EFBFBD>""<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL<EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
inline operator const char*() const
|
|||
|
|
{
|
|||
|
|
return m_sStr ? m_sStr : EMPTY_STR;
|
|||
|
|
}
|
|||
|
|
/* <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ(const char*)<29><>
|
|||
|
|
ע<EFBFBD>⣺ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ΪNULL<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>᷵<EFBFBD><EFBFBD>""<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL<EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
inline operator char*()
|
|||
|
|
{
|
|||
|
|
return m_sStr ? m_sStr : NULL;
|
|||
|
|
}
|
|||
|
|
/* <09><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(const char*)<29><><EFBFBD>͵<EFBFBD>ֵ */
|
|||
|
|
inline void operator = (const char* data)
|
|||
|
|
{
|
|||
|
|
if ( data != m_sStr )
|
|||
|
|
{
|
|||
|
|
setData( data );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/* <09><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>͵<EFBFBD>ֵ */
|
|||
|
|
inline void operator = (const AnsiString& str)
|
|||
|
|
{
|
|||
|
|
if ( &str != this )
|
|||
|
|
{
|
|||
|
|
setData( str.m_sStr );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/* <09><>(const char*)<29><><EFBFBD>͵<EFBFBD><CDB5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
|
inline void operator += (const char* data)
|
|||
|
|
{
|
|||
|
|
if ( data != m_sStr )
|
|||
|
|
{
|
|||
|
|
catData( data );
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
AnsiString wstr(m_sStr);
|
|||
|
|
catData(wstr.m_sStr);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/* <09><><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
|
inline void operator += (const AnsiString& str)
|
|||
|
|
{
|
|||
|
|
if ( &str != this )
|
|||
|
|
{
|
|||
|
|
catData( str.m_sStr );
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
AnsiString wstr(m_sStr);
|
|||
|
|
catData(wstr.m_sStr);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/* <09><>(const char*)<29><><EFBFBD>ͽ<EFBFBD><CDBD>мӷ<D0BC><D3B7><EFBFBD><EFBFBD>㲢<EFBFBD><E3B2A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD>CAnsiString<6E><67> */
|
|||
|
|
inline const AnsiString operator + (const char* data)
|
|||
|
|
{
|
|||
|
|
AnsiString str( m_sStr );
|
|||
|
|
str.catData( data );
|
|||
|
|
return str;
|
|||
|
|
}
|
|||
|
|
/* <09><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>мӷ<D0BC><D3B7><EFBFBD><EFBFBD>㲢<EFBFBD><E3B2A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD>CAnsiString<6E><67> */
|
|||
|
|
inline const AnsiString operator + (const AnsiString& str)
|
|||
|
|
{
|
|||
|
|
AnsiString _str( m_sStr );
|
|||
|
|
_str.catData( str.m_sStr );
|
|||
|
|
return _str;
|
|||
|
|
}
|
|||
|
|
/* <20>ж<EFBFBD><D0B6><EFBFBD>(const char*)<29><><EFBFBD>͵<EFBFBD><CDB5>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>е<EFBFBD><D0B5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>ССд<D0A1><D0B4> */
|
|||
|
|
inline bool operator == (const char* data) const
|
|||
|
|
{
|
|||
|
|
return compare( data ) == 0;
|
|||
|
|
}
|
|||
|
|
/* <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>ССд<D0A1><D0B4> */
|
|||
|
|
inline bool operator == (const AnsiString& str) const
|
|||
|
|
{
|
|||
|
|
return compare( str.m_sStr ) == 0;
|
|||
|
|
}
|
|||
|
|
/* <20>ж<EFBFBD><D0B6><EFBFBD>(const char*)<29><><EFBFBD>͵<EFBFBD><CDB5>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>е<EFBFBD><D0B5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>ССд<D0A1><D0B4> */
|
|||
|
|
inline bool operator != (const char* data) const
|
|||
|
|
{
|
|||
|
|
return compare( data ) != 0;
|
|||
|
|
}
|
|||
|
|
/* <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>ССд<D0A1><D0B4> */
|
|||
|
|
inline bool operator != (const AnsiString& str) const
|
|||
|
|
{
|
|||
|
|
return compare( str.m_sStr ) != 0;
|
|||
|
|
}
|
|||
|
|
/* <09>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>ǿ<EFBFBD> */
|
|||
|
|
inline bool operator ! () const
|
|||
|
|
{
|
|||
|
|
return !m_sStr || !m_sStr[0];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
/* ȡ<><C8A1><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8> */
|
|||
|
|
inline const char* rawStr() const
|
|||
|
|
{
|
|||
|
|
return m_sStr;
|
|||
|
|
}
|
|||
|
|
/* ȡ<><C8A1><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8> */
|
|||
|
|
inline char* rawStr()
|
|||
|
|
{
|
|||
|
|
return m_sStr;
|
|||
|
|
}
|
|||
|
|
/* ȡ<><C8A1><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
|
inline size_t length() const
|
|||
|
|
{
|
|||
|
|
return m_sStr ? strlen(m_sStr) : 0;
|
|||
|
|
}
|
|||
|
|
/* <09><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>) */
|
|||
|
|
inline void setLength(const size_t len)
|
|||
|
|
{
|
|||
|
|
if ( len > 0 )
|
|||
|
|
{
|
|||
|
|
m_sStr = (char*)alloc( m_sStr, sizeof(m_sStr[0]) * (len + 1) );
|
|||
|
|
if ( m_sStr ) m_sStr[len] = 0;
|
|||
|
|
}
|
|||
|
|
else m_sStr = (char*)alloc( m_sStr, 0 );
|
|||
|
|
}
|
|||
|
|
/* <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ա<EFBFBD> */
|
|||
|
|
inline int compare(const char* data) const
|
|||
|
|
{
|
|||
|
|
if ( !m_sStr || !m_sStr[0] )
|
|||
|
|
{
|
|||
|
|
if ( !data || !data[0] )
|
|||
|
|
return 0;
|
|||
|
|
else return 1;
|
|||
|
|
}
|
|||
|
|
return strcmp( m_sStr, data );
|
|||
|
|
}
|
|||
|
|
/* <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жԱ<D0B6> */
|
|||
|
|
inline int compare(const AnsiString& str) const
|
|||
|
|
{
|
|||
|
|
if ( !m_sStr || !m_sStr[0] )
|
|||
|
|
{
|
|||
|
|
if ( !str.m_sStr || !str.m_sStr[0] )
|
|||
|
|
return 0;
|
|||
|
|
else return 1;
|
|||
|
|
}
|
|||
|
|
return strcmp( m_sStr, str.m_sStr );
|
|||
|
|
}
|
|||
|
|
/* <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> */
|
|||
|
|
inline bool isEmpty() const
|
|||
|
|
{
|
|||
|
|
return !m_sStr || !m_sStr[0];
|
|||
|
|
}
|
|||
|
|
/* ת<><D7AA><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪUCS-2LE<4C><45>ʽ<EFBFBD><CABD>
|
|||
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>sOutput<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ұ<EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>sOutput<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>sOutput<EFBFBD><EFBFBD>
|
|||
|
|
<EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>null<EFBFBD><EFBFBD>sOutput<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD>ı䣻
|
|||
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>sOutput<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD>Һ<EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>CWideString<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ٺ<EFBFBD><EFBFBD>ʵ<EFBFBD>ʱ<EFBFBD><EFBFBD>delete<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
|
|||
|
|
ת<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL
|
|||
|
|
*/
|
|||
|
|
//WideString* toWStr(WideString* sOutput = NULL) const;
|
|||
|
|
/* <20><>ʽ<EFBFBD><CABD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> */
|
|||
|
|
size_t format(const char* fmt, ...);
|
|||
|
|
size_t format_args(const char* fmt, va_list _Args);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|