strncat strncpy strcat strcpy看起来是应用了4个函数,其实在我看来他们只有两个,要应用这些函数必须要包含头文件<string.h>。
strcpy是字符串的复制,可以将a的字符串的内容拷贝到b里面。下面是我自己实现的strcpy的自我编写
#include<iostream>
using namespace std;
void mystrcpy(char* a, const char* b)
{
while (*b != '\0')
{
*a = *b;
a++;
b++;
}
*a = '\0';
}
int main()
{
char arr1[] = { "i love china" };
char arr2[30];
mystrcpy(arr2, arr1);
printf("%s", arr2);
我们都知道字符串的最后一定会有一个'\0'作为最后的终止符,那么我们便以他为终点来进行,这里我用了while循环来一个一个的传递值来完成拷贝但是别忘了最后要在a最后面加上'\0'。因为是先判断后开始拷贝,所以当b为\0时,会跳出循环,使得a的最后没有\0。、
strcat是字符串的拼接,如abcd字符串和jkl字符串拼接成abcdjkl一个字符串。下面是代码的实现
#include<iostream>
using namespace std;
void mystrcat(char* a, char* b)
{
while (*a != '\0')
{
a++;
}
while (*b != '\0')
{
*a++ = *b++;
}
*a = '\0';
}
int main()
{
char a[] = "i love china";
char b[] = " very much";
mystrcat(a, b);
printf("%s", a);
}
如果要将一个字符串与另一个字符串拼接,那么我要找到我要从哪里开始拼接,所以我变要找到被拼接的字符串的末尾如上面举例中abcd的末尾是d。那我们都知道字符串的最后会有\0,所以我通过一次while循环来锁定它。然后再从\0开始拼接(注意一定要把\0覆盖掉)。直到遇到下一个字符串的\0,便停止循环。(别忘了加\0)
为什么我开头说只有两个函数呢,因为strcpy与strncpy都是大同小异的。只不过strncpy需要你额外传给他一个变量,好让他知道你要复制几个。那么我们便可以将while循环改成for循环来完成复制条件。
#include<iostream>
using namespace std;
void mystrncpy(char* a, char* b, int n)
{
int i = 0;
for (i = 0; *b != '\0' && i < n; i++)
{
*a = *b;
a++;
b++;
}
*a = '\0';
}
int main()
{
char a[] = "abc";
char b[] = "efgh";
mystrncpy(a,b,3);
printf("%s",a);
}
但是我的for循环的结束条件不是仅有一个,还有*b!='\0'这是因为防止b只有四个字母,而你偏偏让他传五个引起的问题。通过代码可以看见我只是在strcpy的源代码上做了一些改动,核心的思想相差不大。
strncat与strcat的情况也是类似的。
#include<iostream>
using namespace std;
void mystrncat(char* a, char* b, int n)
{
while (*a != '\0')
{
a++;
}
int i = 0;
for (i = 0; *b != '\0'&& i < n; i++)
{
*a = *b;
a++;
b++;
}
*a = '\0';
}
int main()
{
char a[] = "abcde";
char b[] = "fgh";
mystrncat(a,b,2);
printf("%s",a);
}