⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 string.h

📁 基于sip协议的网络电话源码
💻 H
📖 第 1 页 / 共 2 页
字号:
/* $Id: string.h 1193 2007-04-15 09:54:17Z bennylp $ *//*  * Copyright (C)2003-2007 Benny Prijono <benny@prijono.org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  */#ifndef __PJ_STRING_H__#define __PJ_STRING_H__/** * @file string.h * @brief PJLIB String Operations. */#include <pj/types.h>#include <pj/compat/string.h>PJ_BEGIN_DECL/** * @defgroup PJ_PSTR String Operations * @ingroup PJ_DS * @{ * This module provides string manipulation API. * * \section pj_pstr_not_null_sec PJLIB String is NOT Null Terminated! * * That is the first information that developers need to know. Instead * of using normal C string, strings in PJLIB are represented as * pj_str_t structure below: * * <pre> *   typedef struct pj_str_t *   { *       char      *ptr; *       pj_size_t  slen; *   } pj_str_t; * </pre> * * There are some advantages of using this approach: *  - the string can point to arbitrary location in memory even *    if the string in that location is not null terminated. This is *    most usefull for text parsing, where the parsed text can just *    point to the original text in the input. If we use C string, *    then we will have to copy the text portion from the input *    to a string variable. *  - because the length of the string is known, string copy operation *    can be made more efficient. * * Most of APIs in PJLIB that expect or return string will represent * the string as pj_str_t instead of normal C string. * * \section pj_pstr_examples_sec Examples * * For some examples, please see: *  - @ref page_pjlib_string_test *//** * Create string initializer from a normal C string. * * @param str	Null terminated string to be stored. * * @return	pj_str_t. */PJ_IDECL(pj_str_t) pj_str(char *str);/** * Create constant string from normal C string. * * @param str	The string to be initialized. * @param s	Null terminated string. * * @return	pj_str_t. */PJ_INLINE(const pj_str_t*) pj_cstr(pj_str_t *str, const char *s){    str->ptr = (char*)s;    str->slen = s ? (pj_ssize_t)strlen(s) : 0;    return str;}/** * Set the pointer and length to the specified value. * * @param str	    the string. * @param ptr	    pointer to set. * @param length    length to set. * * @return the string. */PJ_INLINE(pj_str_t*) pj_strset( pj_str_t *str, char *ptr, pj_size_t length){    str->ptr = ptr;    str->slen = (pj_ssize_t)length;    return str;}/** * Set the pointer and length of the string to the source string, which * must be NULL terminated. * * @param str	    the string. * @param src	    pointer to set. * * @return the string. */PJ_INLINE(pj_str_t*) pj_strset2( pj_str_t *str, char *src){    str->ptr = src;    str->slen = src ? (pj_ssize_t)strlen(src) : 0;    return str;}/** * Set the pointer and the length of the string. * * @param str	    The target string. * @param begin	    The start of the string. * @param end	    The end of the string. * * @return the target string. */PJ_INLINE(pj_str_t*) pj_strset3( pj_str_t *str, char *begin, char *end ){    str->ptr = begin;    str->slen = (pj_ssize_t)(end-begin);    return str;}/** * Assign string. * * @param dst	    The target string. * @param src	    The source string. * * @return the target string. */PJ_IDECL(pj_str_t*) pj_strassign( pj_str_t *dst, pj_str_t *src );/** * Copy string contents. * * @param dst	    The target string. * @param src	    The source string. * * @return the target string. */PJ_IDECL(pj_str_t*) pj_strcpy(pj_str_t *dst, const pj_str_t *src);/** * Copy string contents. * * @param dst	    The target string. * @param src	    The source string. * * @return the target string. */PJ_IDECL(pj_str_t*) pj_strcpy2(pj_str_t *dst, const char *src);/** * Copy source string to destination up to the specified max length. * * @param dst	    The target string. * @param src	    The source string. * @param max	    Maximum characters to copy. * * @return the target string. */PJ_IDECL(pj_str_t*) pj_strncpy(pj_str_t *dst, const pj_str_t *src, 			       pj_ssize_t max);/** * Copy source string to destination up to the specified max length, * and NULL terminate the destination. If source string length is * greater than or equal to max, then max-1 will be copied. * * @param dst	    The target string. * @param src	    The source string. * @param max	    Maximum characters to copy. * * @return the target string. */PJ_IDECL(pj_str_t*) pj_strncpy_with_null(pj_str_t *dst, const pj_str_t *src,					 pj_ssize_t max);/** * Duplicate string. * * @param pool	    The pool. * @param dst	    The string result. * @param src	    The string to duplicate. * * @return the string result. */PJ_IDECL(pj_str_t*) pj_strdup(pj_pool_t *pool,			      pj_str_t *dst,			      const pj_str_t *src);/** * Duplicate string and NULL terminate the destination string. * * @param pool	    The pool. * @param dst	    The string result. * @param src	    The string to duplicate. * * @return	    The string result. */PJ_IDECL(pj_str_t*) pj_strdup_with_null(pj_pool_t *pool,					pj_str_t *dst,					const pj_str_t *src);/** * Duplicate string. * * @param pool	    The pool. * @param dst	    The string result. * @param src	    The string to duplicate. * * @return the string result. */PJ_IDECL(pj_str_t*) pj_strdup2(pj_pool_t *pool,			       pj_str_t *dst,			       const char *src);/** * Duplicate string and NULL terminate the destination string. * * @param pool	    The pool. * @param dst	    The string result. * @param src	    The string to duplicate. * * @return	    The string result. */PJ_IDECL(pj_str_t*) pj_strdup2_with_null(pj_pool_t *pool,					 pj_str_t *dst,					 const char *src);/** * Duplicate string. * * @param pool	    The pool. * @param src	    The string to duplicate. * * @return the string result. */PJ_IDECL(pj_str_t) pj_strdup3(pj_pool_t *pool, const char *src);/** * Return the length of the string. * * @param str	    The string. * * @return the length of the string. */PJ_INLINE(pj_size_t) pj_strlen( const pj_str_t *str ){    return str->slen;}/** * Return the pointer to the string data. * * @param str	    The string. * * @return the pointer to the string buffer. */PJ_INLINE(const char*) pj_strbuf( const pj_str_t *str ){    return str->ptr;}/** * Compare strings.  * * @param str1	    The string to compare. * @param str2	    The string to compare. * * @return  *	- < 0 if str1 is less than str2 *      - 0   if str1 is identical to str2 *      - > 0 if str1 is greater than str2 */PJ_IDECL(int) pj_strcmp( const pj_str_t *str1, const pj_str_t *str2);/** * Compare strings. * * @param str1	    The string to compare. * @param str2	    The string to compare. * * @return  *	- < 0 if str1 is less than str2 *      - 0   if str1 is identical to str2 *      - > 0 if str1 is greater than str2 */PJ_IDECL(int) pj_strcmp2( const pj_str_t *str1, const char *str2 );/** * Compare strings.  * * @param str1	    The string to compare. * @param str2	    The string to compare. * @param len	    The maximum number of characters to compare. * * @return  *	- < 0 if str1 is less than str2 *      - 0   if str1 is identical to str2 *      - > 0 if str1 is greater than str2 */PJ_IDECL(int) pj_strncmp( const pj_str_t *str1, const pj_str_t *str2, 			  pj_size_t len);/** * Compare strings.  * * @param str1	    The string to compare. * @param str2	    The string to compare.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -