?? lib_str.c
字號(hào):
/*
*********************************************************************************************************
* uC/LIB
* CUSTOM LIBRARY MODULES
*
* (c) Copyright 2004-2006; Micrium, Inc.; Weston, FL
*
* All rights reserved. Protected by international copyright laws.
*
* uC/LIB is provided in source form for FREE evaluation, for educational
* use or peaceful research. If you plan on using uC/LIB in a commercial
* product you need to contact Micrium to properly license its use in your
* product. We provide ALL the source code for your convenience and to
* help you experience uC/LIB. The fact that the source code is provided
* does NOT mean that you can use it without paying a licensing fee.
*
* Knowledge of the source code may NOT be used to develop a similar product.
*
* Please help us continue to provide the Embedded community with the finest
* software available. Your honesty is greatly appreciated.
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*
* ASCII STRING MANAGEMENT
*
* Filename : lib_str.c
* Version : V1.22
* Programmer(s) : ITJ
* JDH
*********************************************************************************************************
* Note(s) : (1) NO compiler-supplied standard library functions are used in library or product software.
*
* (a) ALL standard library functions are implemented in the custom library modules :
*
* (1) \<Custom Library Directory>\lib*.*
*
* (2) \<Custom Library Directory>\Ports\<cpu>\<compiler>\lib*_a.*
*
* where
* <Custom Library Directory> directory path for custom library software
* <cpu> directory name for specific processor (CPU)
* <compiler> directory name for specific compiler
*
* (b) Product-specific library functions are implemented in individual products.
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* INCLUDE FILES
*********************************************************************************************************
*/
#define LIB_STR_MODULE
#include <lib_str.h>
/*$PAGE*/
/*
*********************************************************************************************************
* LOCAL DEFINES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LOCAL CONSTANTS
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LOCAL DATA TYPES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LOCAL TABLES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LOCAL GLOBAL VARIABLES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LOCAL FUNCTION PROTOTYPES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LOCAL CONFIGURATION ERRORS
*********************************************************************************************************
*/
/*$PAGE*/
/*
*********************************************************************************************************
* Str_Len()
*
* Description : Calculate length of a string.
*
* Argument(s) : pstr Pointer to string (see Note #1).
*
* Return(s) : Length of string; number of characters in string before terminating NULL character.
*
* Caller(s) : various.
*
* Note(s) : (1) String buffer NOT modified.
*
* (2) String length calculation terminates when :
*
* (a) String pointer points to NULL.
* (1) String buffer overlaps with NULL address.
* (2) String length calculated for string up to but NOT beyond or including
* the NULL address.
*
* (b) Terminating NULL character found.
* (1) String length calculated for string up to but NOT including
* the NULL character.
*********************************************************************************************************
*/
CPU_SIZE_T Str_Len (CPU_CHAR *pstr)
{
CPU_SIZE_T len;
len = 0;
while (( pstr != (CPU_CHAR *)0) && /* Calc str len until NULL ptr (see Note #2a) ... */
(*pstr != (CPU_CHAR )0)) { /* ... or NULL char found (see Note #2b). */
len++;
pstr++;
}
return (len);
}
/*$PAGE*/
/*
*********************************************************************************************************
* Str_Copy()
*
* Description : Copy source string to destination string buffer.
*
* Argument(s) : pdest Pointer to destination string buffer to receive source string copy (see Note #1).
*
* psrc Pointer to source string to copy into destination string buffer.
*
* Return(s) : Pointer to destination string, if NO errors (see Note #2).
*
* Pointer to NULL, otherwise.
*
* Caller(s) : various.
*
* Note(s) : (1) Destination buffer size NOT validated; buffer overruns MUST be prevented by caller.
*
* (a) Destination buffer size MUST be large enough to accomodate the entire source
* string size including the terminating NULL character.
*
* (2) String copy terminates when :
*
* (a) Destination/Source string pointer(s) are passed NULL pointers.
* (1) No string copy performed; NULL pointer returned.
*
* (b) Destination/Source string pointer(s) points to NULL.
* (1) String buffer(s) overlap with NULL address.
* (2) Source string copied into destination string buffer up to but NOT beyond or
* including the NULL address; destination string buffer properly terminated
* with NULL character.
*
* (c) Source string's terminating NULL character found.
* (1) Entire source string copied into destination string buffer.
*********************************************************************************************************
*/
CPU_CHAR *Str_Copy (CPU_CHAR *pdest,
CPU_CHAR *psrc)
{
CPU_CHAR *pstr;
CPU_CHAR *pstr_next;
/* Rtn NULL if str ptr(s) NULL (see Note #2a). */
if (pdest == (CPU_CHAR *)0) {
return ((CPU_CHAR *)0);
}
if (psrc == (CPU_CHAR *)0) {
return ((CPU_CHAR *)0);
}
pstr = pdest;
pstr_next = pstr;
pstr_next++;
while (( pstr_next != (CPU_CHAR *)0) && /* Copy str until NULL ptr(s) (see Note #2b) ... */
( psrc != (CPU_CHAR *)0) &&
(*psrc != (CPU_CHAR )0)) { /* ... or NULL char found (see Note #2c). */
*pstr = *psrc;
pstr++;
pstr_next++;
psrc++;
}
*pstr = (CPU_CHAR)0; /* Append NULL char (see Note #2b2). */
return (pdest);
}
/*$PAGE*/
/*
*********************************************************************************************************
* Str_Copy_N()
*
* Description : Copy source string to destination string buffer, up to a maximum number of characters.
*
* Argument(s) : pdest Pointer to destination string buffer to receive source string copy (see Note #1).
*
* psrc Pointer to source string to copy into destination string buffer.
*
* len_max Maximum number of characters to copy (see Note #2d).
*
* Return(s) : Pointer to destination string, if NO errors (see Note #2).
*
* Pointer to NULL, otherwise.
*
* Caller(s) : various.
*
* Note(s) : (1) Destination buffer size NOT validated; buffer overruns MUST be prevented by caller.
*
* (a) Destination buffer size MUST be large enough to accomodate the entire source
* string size including the terminating NULL character.
*
* (2) String copy terminates when :
*
* (a) Destination/Source string pointer(s) are passed NULL pointers.
* (1) No string copy performed; NULL pointer returned.
*
* (b) Destination/Source string pointer(s) points to NULL.
* (1) String buffer(s) overlap with NULL address.
* (2) Source string copied into destination string buffer up to but NOT beyond or
* including the NULL address; destination string buffer properly terminated
* with NULL character.
*
* (c) Source string's terminating NULL character found.
* (1) Entire source string copied into destination string buffer.
*
* (d) 'len_max' number of characters copied.
* (1) 'len_max' number of characters does NOT include the terminating NULL character.
*
* See also Note #1a.
*********************************************************************************************************
*/
CPU_CHAR *Str_Copy_N (CPU_CHAR *pdest,
CPU_CHAR *psrc,
CPU_SIZE_T len_max)
{
CPU_CHAR *pstr;
CPU_CHAR *pstr_next;
CPU_SIZE_T len_copy;
/* Rtn NULL if str ptr(s) NULL (see Note #2a). */
if (pdest == (CPU_CHAR *)0) {
return ((CPU_CHAR *)0);
}
if (psrc == (CPU_CHAR *)0) {
return ((CPU_CHAR *)0);
}
if (len_max == (CPU_SIZE_T)0) { /* Rtn NULL if copy len equals zero (see Note #2d). */
return ((CPU_CHAR *)0);
}
pstr = pdest;
pstr_next = pstr;
pstr_next++;
len_copy = 0;
while (( pstr_next != (CPU_CHAR *)0) && /* Copy str until NULL ptr(s) (see Note #2b) ... */
( psrc != (CPU_CHAR *)0) &&
(*psrc != (CPU_CHAR )0) && /* ... or NULL char found (see Note #2c); ... */
( len_copy < (CPU_SIZE_T)len_max)) { /* ... or max nbr chars copied (see Note #2d). */
*pstr = *psrc;
pstr++;
pstr_next++;
psrc++;
len_copy++;
}
*pstr = (CPU_CHAR)0; /* Append NULL char (see Note #2b2). */
return (pdest);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -