目录
引言:
一、strncpy函数介绍:
1.声明:
2.功能:
3.底层代码:
二、strnact函数介绍:
1.声明:
2.功能:
3.底层代码:
三、strncmp函数介绍:
1.声明:
2.功能:
3.底层代码:
总结:
strncpy、strncat和strncmp是三个非常常用的字符串函数,它们在字符串的复制、连接和比较方面发挥着重要作用。本文将介绍这三个函数的功能和使用方法。
strcpy、strcat和strcmp函数功能的实现请查看博客:
自我实现——字符串函数strcpy、strcat、strcmp的功能(2)-CSDN博客
char * strncpy ( char * destination, const char * source, size_t num );
将原字符串的前num个字符复制到destination。
如果复制num个字符之前,已到达原字符串的末尾(由null表示),则剩余destination将填充为零,直至总共写入num个字符。
destination和source的内存存放位置不能重叠,若重叠需考虑其他安全方案替代,如memmove函数,我将在后续介绍内存操作函数时写到。
char * __cdecl strncpy (char * dest, const char * source, size_t count)
{
char *start = dest;
while (count && (*dest++ = *source++) != '\0') /* copy string */
count--;
if (count) /* pad out with zeroes */
while (--count)
*dest++ = '\0';
return(start);
}
char * strncat ( char * destination, const char * source, size_t num );
char *strncat(char *dest, const char *src, size_t n) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。
char * __cdecl strncat (char * front, const char * back, size_t count)
{
char *start = front;
while (*front++)
;
front--;
while (count--)
if ((*front++ = *back++) == 0)
return(start);
*front = '\0';
return(start);
}
int strncmp ( const char * str1, const char * str2, size_t num );
用于比较两个字符串的前 n 个字符是否相等。
通常用于比较两个字符串,以确定它们是否相等或哪个字符串在字典顺序上更小。
int strncmp(const char *str1, const char *str2, size_t n) 把 str1 和 str2 进行比较,最多比较前 n 个字符。
int __cdecl strncmp
(
const char *first,
const char *last,
size_t count
)
{
size_t x = 0;
if (!count)
{
return 0;
}
/*
* This explicit guard needed to deal correctly with boundary
* cases: strings shorter than 4 bytes and strings longer than
* UINT_MAX-4 bytes .
*/
if( count >= 4 )
{
/* unroll by four */
for (; x < count-4; x+=4)
{
first+=4;
last +=4;
if (*(first-4) == 0 || *(first-4) != *(last-4))
{
return(*(unsigned char *)(first-4) - *(unsigned char *)(last-4));
}
if (*(first-3) == 0 || *(first-3) != *(last-3))
{
return(*(unsigned char *)(first-3) - *(unsigned char *)(last-3));
}
if (*(first-2) == 0 || *(first-2) != *(last-2))
{
return(*(unsigned char *)(first-2) - *(unsigned char *)(last-2));
}
if (*(first-1) == 0 || *(first-1) != *(last-1))
{
return(*(unsigned char *)(first-1) - *(unsigned char *)(last-1));
}
}
}
/* residual loop */
for (; x < count; x++)
{
if (*first == 0 || *first != *last)
{
return(*(unsigned char *)first - *(unsigned char *)last);
}
first+=1;
last+=1;
}
return 0;
}
strncpy、strncat和strncmp这三个函数在字符串操作中发挥着重要作用,掌握它们的使用方法对于提高编程效率和程序质量具有重要意义。在实际编程过程中,合理运用这些函数,可以有效避免字符串操作中的一些常见错误,提高程序的稳定性和可靠性。