字符串(一)strlen、strcpy、strcat的实现

来源:互联网 发布:淘宝网上买手机可靠吗 编辑:程序博客网 时间:2024/06/06 00:43
/返回字符串的长度int mystrlen(char *p){    int a = 0;    while ((*p++ )!='\0')    {        a++;    }    return a;}
//拷贝字符串,将内存source上的值存到另一个内存上char *mystrcpy(char *dest,const char *source){    if (dest == NULL || source == NULL)        return NULL;    char *p = dest;    while (*source != '\0')        *dest++ = *source++;    *dest= '\0';    return p;}

1、一定要注意检查指针,所以这里返回char*用于检查;要新申请一个指针指向dest并返回这个指针,为什么不能直接返回dest呢?因为返回dest是修改后的值,指针增加后的值,需返回dest最初的地址。
2、此处的函数调用能更改指针指向的值,并不会更改指针的值
3、此处使用const,是规定该函数范围内不能更改source指向的内容的值

//拼接字符串,把p2拼到p1后面char *mystrcat(char *p1,const char *p2){    if (p1 == NULL || p2 == NULL)        return NULL;    char *q = p1;    while (*p1 != '\0')        p1++;    while ((*p1++ = *p2++) != '\0');    return q;}

这里的p1一定要有足够的空间,如果主函数是char *ss=”abc”,想要在ss后面拼接就会报错,因为ss只有4个字节(连\0一起)

完整的程序如下:

#include<stdio.h>#include<stdlib.h>#include<string.h>//返回字符串的长度int mystrlen(char *p){    int a = 0;    while ((*p++ )!='\0')    {        a++;    }    return a;}//拷贝字符串,将内存source上的值存到另一个内存上char *mystrcpy(char *dest,const char *source){    if (dest == NULL || source == NULL)        return NULL;    char *p = dest;    while (*source != '\0')//与下面两行可以合写成while((*dest++=*source++)!='\0');先赋值再判断是否循环        *dest++ = *source++;    *dest= '\0';    return p;}//拼接字符串,把p2拼到p1后面char *mystrcat(char *p1,const char *p2){    if (p1 == NULL || p2 == NULL)        return NULL;    char *q = p1;    while (*p1 != '\0')        p1++;    while ((*p1++ = *p2++) != '\0');    return q;}int main(void){    char c[50]="jjj";    char *b = "hhh";    char *s = malloc(10*sizeof(char));    char *q = malloc(10 * sizeof(char));    gets(s);    printf("%d\n", mystrlen(s));    mystrcpy(q, s);    printf("%s\n", q);    mystrcat(c, b);    printf("%s\n", c);    free(s);    free(q);    return 0;}
0 0
原创粉丝点击