目录
引言:
一、strncpy函数介绍:
1.声明:
2.功能:
3.底层代码:
二、strnact函数介绍:
1.声明:
2.功能:
3.底层代码:
三、strncmp函数介绍:
1.声明:
2.功能:
3.底层代码:
总结:
引言:
strncpy、strncat和strncmp是三个非常常用的字符串函数,它们在字符串的复制、连接和比较方面发挥着重要作用。本文将介绍这三个函数的功能和使用方法。
strcpy、strcat和strcmp函数功能的实现请查看博客:
自我实现——字符串函数strcpy、strcat、strcmp的功能(2)-CSDN博客
一、strncpy函数介绍:
1.声明:
char * strncpy ( char * destination, const char * source, size_t num );
2.功能:
将原字符串的前num个字符复制到destination。
如果复制num个字符之前,已到达原字符串的末尾(由null表示),则剩余destination将填充为零,直至总共写入num个字符。
destination和source的内存存放位置不能重叠,若重叠需考虑其他安全方案替代,如memmove函数,我将在后续介绍内存操作函数时写到。
3.底层代码:
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);
}
二、strncat函数介绍:
1.声明:
char * strncat ( char * destination, const char * source, size_t num );
2.功能:
char *strncat(char *dest, const char *src, size_t n) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。
3.底层代码:
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);
}
三、strncmp函数介绍:
1.声明:
int strncmp ( const char * str1, const char * str2, size_t num );
2.功能:
用于比较两个字符串的前 n 个字符是否相等。
通常用于比较两个字符串,以确定它们是否相等或哪个字符串在字典顺序上更小。
int strncmp(const char *str1, const char *str2, size_t n) 把 str1 和 str2 进行比较,最多比较前 n 个字符。
3.底层代码:
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这三个函数在字符串操作中发挥着重要作用,掌握它们的使用方法对于提高编程效率和程序质量具有重要意义。在实际编程过程中,合理运用这些函数,可以有效避免字符串操作中的一些常见错误,提高程序的稳定性和可靠性。