C语言指针用法总结——指针与字符串

指针与字符串

总结字符数组、字符串、字符串的函数以及字符串与指针,并自己写了一些string函数。

指针就是内存地址,每一个存储单元都有一个32位编码的内存地址,指针指向某一变量,即把该变量的内存地址赋值给该指针
字符串:以’\0’结尾的字符数组就是字符串。


```c
#include<stdio.h>
#include<string.h>
char *mystrcpy(char *dest,char *src);
char *mystrcat(char *dest,char *src);
int mystrlen(char* src);
int mystrcmp(char* str1,char* str2);

int main()
{
    int i;
    char a[] = {'h','e','l','l','o'}; //字符数组
    printf("%s\n",a);  //字符数组只能用for循环打印,否则后面会出现乱码
    char b[] = {'h','e','l','l','o','\0'}; // 以'\0'结尾的字符数组就是一个字符串,可以用%s完美打印
    printf("%s\n",b);                      
    char c[] = "hello,my name is trump!,I'm the spy of CN" ; //更方便快捷的字符串初始化方式,若想表达一个字符串,用它!
    printf("%s\n",c); 
    //需要注意的是,字符串的结束符会占一个字节,比如 char d[3] = "123";会报错
    
    //字符串函数
    //一、strcpy
    char stra[15];
    char strb[] = "223333";
    strcpy(stra,strb);
    printf("%s\n",stra);
    mystrcpy(stra,strb);
    printf("%s\n",stra);

    //二、strcat
    char strc[] = "大家好,我是大sao,";
    char strd[] = "今天咱们吃一顿好的!";
    strcat(strc,strd);
    printf("%s\n",strc); 
    mystrcat(strc,strd); //再吃一顿好的。。。天天吃好的!
    printf("%s\n",strc);
    //三、strlen
    char stre[] = "xyyz";
    int n = strlen(stre);
    printf("n=%d\n",n);
    int n2 = mystrlen(stre);
    printf("n2=%d\n",n2);
    //四、strcmp
    char t1[] = "hello";
    char t2[] = "hell";
    printf("%d\n",strcmp(t1,t2));
    printf("%d\n",mystrcmp(t1,t2));

    return 0;
}
//函数功能:将源字符串src拷贝到目标字符串dest中,且dest中的字符串被删除
//函数输入: 两个字符指针,指向传入dest以及src的地址,
//函数返回:  指向拷贝后的字符串指针dest 
char *mystrcpy(char *dest,char *src)
{
    char *pSrc = src;
    char *pDest = dest;
    while (*pSrc!=0)
    {
        *pDest = *pSrc;
        pDest++;
        pSrc++;
    }
    *pDest = 0;
    return dest;
    
}
//函数功能:将src字符串连接到dest字符串后面
//函数输入: 两个字符指针,指向传入dest以及src的地址,
//函数返回:  指向连接后的字符串指针dest 
char *mystrcat(char *dest,char *src)
{
    char *pSrc = src;
    char *pDest = dest;
    //先将目标字符串指针移至dest的结束符'\0'位置
    while (*pDest!=0)
    {
        pDest++;
    }
    while (*pSrc!=0)
    {
        *(pDest++) = *(pSrc++);
    }
    *pDest = '\0';
    return dest;
}

//函数功能:输出字符串长度,不包括结束符'\0'
int mystrlen(char* src)
{
    char *p = src;
    int n=0;
    while (*p!=0)
    {
        n++;
        p++;
    }
    return n;
}

//函数功能:比较两个字符串(的ASCII值),str1>str2,返回1,str1<str2,返回-1,str1=str2,返回0,
int mystrcmp(char* str1,char* str2)
{
    char *p1 = str1;
    char *p2 = str2;
    while (*p1!=0)
    {
        if(*p1==*p2)
        {
            p1++;p2++;
        }
        else if (*p1>*p2)
        {
            return 1;
        }
        else if(*p1<*p2)
        {
            return -1;
        }
    }
    if(*p2==0)
        return 0;
    else
         return -1;
    
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值