C语言中字符串与库函数的那些事(+模拟实现)-创新互联

如果本文对大家有用的话,请留下个赞吧( ﹡ˆoˆ﹡ )

成都创新互联公司专注于企业网络营销推广、网站重做改版、内黄网站定制设计、自适应品牌网站建设、成都h5网站建设商城系统网站开发、集团公司官网建设、成都外贸网站建设公司、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为内黄等各大城市提供网站开发制作服务。

如果大家有好的意见或者疑问请留在评论区,看见了一定认真考虑!O(∩_∩)O~~

    • strlen函数

函数原型:size_t strlen(const char *string);

作用:返回字符串长度

实现:从第一个字符开始数,直到遇见\0停止(\0不算入其中,遇见空格也算入其中)。

例子:

#include#includeint main(){
char arr[]="I love China"
int len =strlen(arr);
printf("%d",len);
}

最终输出结果为:12

注意事项:

即size_t-size_t一定的结果是按无符号的解读的(一定大于等于0)

例如:strlne("abc")-strlen("abcd")是大于零的

模拟实现:

1.循环版

#include#include
int my_strlen(const char* str) {
assert(str);
    int count = 0;//计数
    while (*str++ != '\0') 
        count++;
    return count;
}
int main() {
    char arr[] = "I love China";
        int len = my_strlen(arr);
    printf("%d", len);
}

2.递归版

#include#include
int my_strlen(const char* str) {
    assert(str);
    if (*str++ != '\0') return 1 + my_strlen(str);
    return 0;
}
int main() {
    char arr[] = "I love China";
        int len = my_strlen(arr);
    printf("%d", len);
}

3.指针-指针版

#include#include
int my_strlen(const char* str) {
    assert(str);
    const char* end = str;
    while (*end != '\0')end++;//end最终指向\0;
    return end-str;
}
int main() {
    char arr[] = "I love China";
        int len = my_strlen(arr);
    printf("%d", len);
}
    • strcpy函数

函数原型:char* strcpy(char *destination,const char * source)

作用:将指针source指向的字符串拷贝到指针destination指向的空间中,destination中原有的被替代,但是没有被拷贝的地方内容不变(\0会被拷贝,所以后面的打印的时候不会出现)

如图:

实现:从source开始向后一直到遇见\0为止,\0也会拷贝;最后返回指针destination指向位置。

例子:

#include#includeint main() {
    char str1[20] = {”####“};
    char str2[] = "I love China";
    printf("%s", strcpy(str1, str2));
    return 0;
}

最终输出结果为:I love China

注意事项:

ps:如果源字符串没有\0,就会出现以下结果,如图:

ps:destination不能是const char *类型

ps:当目标空间较小,不能完全拷贝,就会越界访问,但是还是会强行将后面的拷贝进去。

模拟实现:

#include#include
char* my_strcpy(char* destination, const char* source) {
    assert(destination);
    assert(source);
    char* str1 = destination;
    const char* str2 = source;
    while (*str1++ =*str2++) ;
    return destination;
}
int main() {
    char str1[20] = {"################"};
    char str2[] = "II love China";
    printf("%s", my_strcpy(str1, str2));
    return 0;
}
    • strcat函数

函数原型: char *strcat(char *strDest,const char *strSrc) ;

作用:将strSrc指向的字符串连接到strDest指向字符串的后面(strSrc的\0也会过去)

实现:找到*strDest中的\0,然后从\0开始连接,直到遇见 *strSrc中的\0为止。(连接过程与strcpy有点相似),最后返回指针strDest指向位置。

例子:

#include#includeint main() {
    char strDest[20] = "holle ";
    const char strSrc[] = "world!";
    printf("%s", strcat(strDest, strSrc));
}

最终输出为:holle world!

注意事项:

ps:三个注意事项的错误结果同strcpy

模拟实现:

#include#include
char* my_strcat(char* Dest, const char* Src) {
    assert(Dest);
    assert(Src);
    char* str = Dest;
    while (*++str);
    while (*str++ = *Src++);
    return Dest;
}
int main() {
    char strDest[20] = "holle ";
    const char strSrc[] = "world!";
    printf("%s", my_strcat(strDest, strSrc));
}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


新闻名称:C语言中字符串与库函数的那些事(+模拟实现)-创新互联
URL分享:http://hbruida.cn/article/docesc.html