70,018
社区成员




/** The implementation of a Unicode string.
@internal
*/
typedef struct _rtl_uString
{
sal_Int32 refCount;
sal_Int32 length;
sal_Unicode buffer[1];
} rtl_uString;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct _string string;
struct _string
{
size_t length;
char buffer[1];
};
string *
create_string(const char *s)
{
size_t len = 0;
const char *cp = s;
string *str;
if(s)
while(*cp++) ++len;
str = (string*)malloc(sizeof(string) + (len + 1) * sizeof(char));
str->length = len;
memcpy(str->buffer, s, len);
str->buffer[len] = '\0';
return str;
}
int
main (int c, char **v)
{
if(c < 2)
return;
string *s;
s = create_string(v[1]);
printf("%d %s\n", s->length, s->buffer);
free(s);
}
void SAL_CALL rtl_uString_newFromAscii( rtl_uString** ppThis,
const sal_Char* pCharStr )
{
sal_Int32 nLen;
if ( pCharStr )
{
const sal_Char* pTempStr = pCharStr;
while( *pTempStr )
pTempStr++;
nLen = pTempStr-pCharStr;
}
else
nLen = 0;
if ( !nLen )
{
IMPL_RTL_STRINGNAME( new )( ppThis );
return;
}
if ( *ppThis )
IMPL_RTL_STRINGNAME( release )( *ppThis );
*ppThis = IMPL_RTL_STRINGNAME( ImplAlloc )( nLen );
OSL_ASSERT(*ppThis != NULL);
if ( (*ppThis) )
{
IMPL_RTL_STRCODE* pBuffer = (*ppThis)->buffer;
do
{
/* Check ASCII range */
OSL_ENSURE( ((unsigned char)*pCharStr) <= 127,
"rtl_uString_newFromAscii() - Found ASCII char > 127" );
*pBuffer = *pCharStr;
pBuffer++;
pCharStr++;
}
while ( *pCharStr );
}
}
_rtl_uString *make_str(int length) {
// int length = 40; 比如需要40个unicode字符。
_rtl_uString *ustr = (_rtl_uString *)malloc(sizeof(sal_Int32) + sizeof(sal_Int32) + length * sizeof(sal_Unicode));
ustr->refCount = 1;
ustr->length = length;
return ustr;
}
typedef struct _rtl_uString
{
sal_Int32 refCount;
sal_Int32 length;
sal_Unicode *buffer;
} rtl_uString;