字符串函数strcmp,strncpy
1.strcat追加函数
2.strcmp比较函数
一。strncat的使用
注意事项
- 源字符串必须以 ‘\0’ 结束。
- 目标空间必须有足够的大,能容纳下源字符串的内容。
- 目标空间必须可修改。
- 字符串自己给自己追加,如何?(最后会解释)
上图为strcat函数的实现逻辑,为方便理解画图说明。大家可以开启看到追加函数是在hello (有空格)
\0的后面追加
char* my_strcat(char* dest, const char* src)
{
assert(dest && src);
char* ret = dest;
//1. 找目标空间的\0
while (*dest)
{
dest++;
}
//2. 追加
while (*dest++ = *src++)
{
;
}
return ret;
}
int main()
{
char arr[20] = "hello ";
my_strcat(arr, "world");
printf("%s\n", arr);
return 0;
}
上述代码是strcat追加的描述,函数的构建第一个循环找到hello \0的位置,此时指针指向这里,再之后进入下一次循环将world的w替换hello的\0;以此循环最后全部替换完成
不可以自己给自己追加。假设hello追加hello,新的函数替换后会出现新的\0这样永远也追加不完。
二。strcmp函数
- 第一个字符串大于第二个字符串,则返回大于0的数字
- 第一个字符串等于第二个字符串,则返回0
- 第一个字符串小于第二个字符串,则返回小于0的数字
- (vs环境下》><0返回的是1.0.-1)
- 那么如何判断两个字符串?
int my_strcmp(const char* str1, const char* str2)
{
assert(str1 && str2);
while (*str1 == *str2)
{
if (*str1 == '\0')
return 0;
str1++;
str2++;
}
if (*str1 > *str2)
return 1;
else
return -1;
}
int main()
{
char arr1[] = "abq";
char arr2[] = "abcdef";
//VS环境下:
//> 1
//= 0
//< -1
int ret = my_strcmp(arr1, arr2);
if (ret>0)
printf("arr1>arr2\n");
printf("%d\n", ret);
return 0;
}