シミュレーション出力制限文字列関数-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つの関数と制限された違いをよりよく理解しました.制限されているのは,この関数にプログラム設計者の好みに応じて関数−制御文字を操作できる個数があることを示すことであると思う.