strncap的使用和模拟实现
相对与strcat函数,strncat可以控制拼接的字符个数。
我们先来看一下库函数中strncat的使用,将arr2中的两个字符拼接到arr1中:
对于模拟实现中,我们需要让指针遍历arr1直到找到arr1中'\0'往前一位的位置,随后将arr2进行拼接,通过for循环中的条件表达式进行控制拼接的个数size。
char* my_strncat(char* arr1, const char* arr2, int size) {
char* p = arr1;
while (*p != '\0') {
p++;
}
for (int i = 0; i < size; i++) {
*p = arr2[i];
p++;
}
return arr1;
}
int main() {
char arr1[20] = "nihao";//要保证有足够的空间来拼接
char arr2[] = "nihao";
my_strncat(arr1, arr2, 2);
printf("%s", arr1);
return 0;
}
程序运行的结果与使用库函数一致,模拟实现成功。
strncmp的使用和模拟实现
相较于strcmp,strncmp可以控制比较前num个字符
对于库函数中strncmp的使用:
int main() {
char str1[] = "abcde";
char str2[] = "abced";
int len=strncmp(str1, str2,4 );
printf("%d", len);
}
函数返回的结果与strcmp函数一致。
对于strncmp的模拟实验:
int my_strncmp(char* arr1, char* arr2, int num) {
char* p = arr1;
for (int i = 0; i < num; i++) {
if (arr1[i]!=arr2[i]) {
return arr1[i]-arr2[i];
}
if (arr1[i] == '\0' || arr2[i] == '\0') {
break;
}
}
return 0;
}
int main() {
char str1[] = "abcde";
char str2[] = "abced";
int len = my_strncmp(str1, str2, 2);
printf("%d\n", len);
int len2 = strncmp(str1, str2, 2);
printf("%d", len2);
}
strncpy的使用和模拟实现
相较于strcpy,strncpy可能控制源字符串中复制的个数
库函数中的strncpy使用如下:
对于模拟实现strncpy
char* my_strncpy(char* arr1, const char* arr2,int size) {
//拷贝num个字符从源字符串到目标空间
int i = 0;
for (; i < size && arr1[i] != '\0'; i++) {
arr1[i] = arr2[i];
}
//如果源字符串的长度小于num,则拷贝完源字符串后,在目标的后面追加\0,直到num个
if (i < size) {
arr1[i] = '\0';//检索到'\0就停止了,后面有没有都一样'
}
return arr1;
}
int main() {
char arr1[4] = "abc" ;
char arr2[] = "fgh" ;
my_strncpy(arr1, arr2,2);
printf("%s", arr1);
}
在上述代码中,需要将i设置为全局变量,而不是在for循环内设置局部变量