シミュレーション出力制限文字列関数-strncat,strncmp,strncpy


1.アナログ出力制限文字回転接続関数_strncat


まず、関数のテストセクションを示します.
int main()
{
	int k=0;
	char *ret=NULL;
	int len=0;
	char arr1[30]="i love you ";
	char arr2[]="china";
	len=strlen(arr2);
	printf(" :");
	scanf("%d",&k);
	if(k<=len)
	{
		ret=my_strncat(arr1,arr2,k);
	}
	printf("%s
",ret); system("pause"); return 0; }

制限された文字列接続関数とは、設計者の意思に従って文字列接続を行うことができるとともに、制限されていない文字列接続関数よりもsrtcatには、自分で自分に接続できる特性が一つ増えています.
制限された文字列接続関数を見てみましょう.strncatのシミュレーション実装
  
char *my_strncat(char * dest,char *src,int len)
{
	char *str1=dest;
	char *str2=src;
	assert(dest);
	assert(src);
	while(*str1 != '\0')  // str1 
	{
		str1++;
	}
	while(len>0 &&(*str2 != '\0'))  //,len , str2 str1
	{
		*str1++=*str2++;
		len--;
	}
	*str1='\0';  // '\0'
	return dest;
}

   

2.アナログ出力制限文字列比較関数_strncmp


 
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
int my_strncmp(const char *dest,const char*src,int k)
{
	assert(dest);
	assert(src);
	while(k>0 && (*dest == *src))
	{
		if(*dest == '\0')
			return 0;
		dest++;
		src++;
		k--;
	}
	return *dest-*src;   
}

int main()
{
	int k=0;
	int ret=0;
	char arr1[]="abcdef";
	char arr2[]="xbcdef";
	printf(" :");
	scanf("%d",&k);
	ret=my_strncmp(arr1,arr2,k);
	if(ret == 0)
	{
		printf("%s %s
",arr1,arr2); } else if(ret > 0) { printf("%s %s
",arr1,arr2); } else { printf("%s %s
",arr1,arr2); } system("pause"); return 0; }

3.アナログ出力制限文字列コピー関数_strncpy

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
char *my_strncpy(char *dest,char *src,int k)
{
	char *tmp=dest;
	assert(dest);
	assert(src);
	while(k--)
	{
		*dest++=*src++;
	}
	*dest='\0';
	return tmp;
}
int main()
{
	char *ret=NULL;
	int k=0;
	char arr1[20];
	char arr2[]="i love you";
	printf(" :");
	scanf("%d",&k);
	ret=my_strncpy(arr1,arr2,k);
	printf("%s
",ret); system("pause"); return 0; }

シミュレーションによる制限文字列接続関数の実装_strncat、制限された文字列比較関数_strncmpと制限された文字列レプリケーション関数_strncpyは、文字列の3つの関数と制限された違いをよりよく理解しました.制限されているのは,この関数にプログラム設計者の好みに応じて関数−制御文字を操作できる個数があることを示すことであると思う.