一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情。
1.源字符串必须以 '\0'结束
//错误的示范
char arr2[] = {'a','b','c'};
2.会将源字符串中的'\0'拷贝到目标空间
3.目标空间必须足够大,以确保可以存放源字符串
模拟实现:
char* my_strcpy(char* dest, const char* src)
{
assert(dest != NULL);
assert(src != NULL);
char* ret = dest;
//拷贝src指向的字符串到dest指向的空间,包含'\0'
while (*dest++ = *src++)
{
;
}
//返回目的空间的起始地址
return ret;
}
int main()
{
char arr1[] = "abcdefghi";
char arr2[] = "bit";
my_strcpy(arr1, arr2);//
printf("%s\n", arr1);
return 0;
}
2.2 strcat
功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。
返回指向dest的指针。
char* strcat(char* destination, const char* source);
1.源字符串必须以 '\0'结束
2.目标空间必须足够大,以确保可以容纳下源字符串的内容
3.目标空间必须可修改
int main()
{
char arr1[] = "hello";
char arr2[] = "world";
strcat(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
虽然可以将world加到hello的后面,但是却报错了这是为什么呢?
这是因为arr1周围栈区损坏,arr1中的位置不够
int main()
{
char arr1[30] = "hello";
char arr2[] = "world";
strcat(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
模拟实现:
char* my_strcat(char* dest, const char* src)
{
char* ret = dest;
assert(dest !=NULL);
assert(src != NULL);
//1.找到目的字符串的'\0'
while (*dest != '\0')
{
dest++;
}
//2.追加
while (*dest++ = *src++)
{
;
}
return ret;
}
int main()
{
char arr1[30] = "hello";
char arr2[] = "world";
my_strcat(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
2.3 strcmp
int strcmp(const char* str1, const char* str2);
第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字