C语言:模拟实现strncpy,strncat,strncmp

1.strncpy

用法:

char * strncpy ( char * destination, const char * source, size_t num )

功能:
将字符串 src 中 n 个字符复制到字符数组 dest 中(它并不像 strcpy 一样只有遇到NULL才停止复制,而是多了一个条件停止,就是说如果复制到第n个字符还未遇到NULL,也一样停止),返回指向 dest 的指针。
src 和 dest 所指内存区域不可以重叠且 dest 必须有足够的空间来容纳 src 的字符串。

模拟实现:

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 

char *my_strncpy(char *des, const char *src, int count)
{
	 char *cp = des;
	 assert(src && des);
	 while(count && (*des++ = *src++))
	 { 
	   count--;
	 }
	 if (count > 0)
	 {
		 while (--count)
		 {
		   *des++='\0';
		 }
	 }
     return cp;
}

int main()
{
   int n;
   char str1[100] = {0};
   char *str2 = "Hello world!";
   printf("%s\n",str2);
   printf("请输入需要复制字符的个数:");
   scanf("%d",&n);
   printf( "%s\n", my_strncpy(str1,str2,n));
   return 0;
}

C语言:模拟实现strncpy,strncat,strncmp_第1张图片

2.strncat

用法:

char * strncat ( char * destination, const char * source, size_t num )

功能:
把 src 所指字符串添加到 dest 结尾处(覆盖 dest 结尾处的 ‘\0’ )并添加’\0’。src 和 des t所指内存区域不可以重叠且 dest 必须有足够的空间来容纳 src 的字符串。返回指向 dest 的指针。

模拟实现:

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 

char *my_strncat(char *dest, const char *src, int count)
{
	 char *cp = dest;
	 assert(src && dest);
	 while (*dest != '\0')
	 {
	      *dest++;
	 }
	 while(count && *src)
	 {
		  *dest++ = *src++;
		  count--;
	 }
	 *dest ='\0';
	 return cp;
}

int main()  
{  
	int n;
	char str1[100] = "Hello";  
	char *str2 = " world!";
	printf("%s\n",str1);
	printf("%s\n",str2);
	printf("请输入拼接字符的个数:");
	scanf("%d",&n);
    printf("%s\n",  my_strncat(str1, str2, n));    
    return 0;  
}  

C语言:模拟实现strncpy,strncat,strncmp_第2张图片

3.strncmp

用法:

int strncmp ( const char * str1, const char * str2, size_t num )

功能:
比较字符串的前N个字符。按ASCII码表比较字符串 str1 和 str2 的大小,如果 str1 小于 str2,返回值就 <0,反之如果 str1 大于 str2,返回值就 >0,如果 str1 等于 str2,返回值就 =0,len指的是 str1 与 str2 的比较的字符数。此函数功能即比较字符串 str1 和 str 2的前 len 个字符。

模拟实现:

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 

int my_strncmp(const char *arr1, const char *arr2, int count)
{
	  assert(arr1 && arr2);
	  while(count && (*arr1 == *arr2))
	  {
		if (arr1 == '\0')
		{
		   return 0;
		}
		arr1++;
		arr2++;
		count--;
	  }
		return *arr1 - *arr2;
}

int main(void)
{
    int n;
	char *arr1 = "abcd";
    char *arr2 = "abcde";
	printf("%s\n", arr1);
	printf("%s\n", arr2);
	printf("请输入比较字符的个数:");
	scanf("%d", &n);
    printf("%d\n", my_strncmp(arr1, arr2,n));
	return 0;
}

C语言:模拟实现strncpy,strncat,strncmp_第3张图片

你可能感兴趣的:(C语言:模拟实现strncpy,strncat,strncmp)