• 字符串函数


    strstr

    函数功能:在一字符串中查找指定的字符串)
    头 文 件: #include <string.h>
    定义函数: char *strstr(const char *haystack, const char * needle);
    参数分析:haystack --> 需要搜查的字符串 (被动 家里)
    needle --> 需要查找的内容 (主动 毒品)
    返 回 值:成功 返回指定字符串第一次出现的地址 失败 返回 0

    char str1[] = "Hello Even&GZ2075"; 
    char *str2;
    str2 = strstr(str1, "ven");
    printf("%s
    ", str2);
    
    输出:ven&GZ2075
    

    strlen

    函数功能:返回字符串长度,不包括''
    头 文 件: #include <string.h>
    定义函数: size_t strlen (const char *s);
    参数分析:s --> 需要求长度的字符串,不包括结束字符""
    返 回 值:返回字符串 s 的字符数

    printf("%ld
    ", strlen("ven&GZ2075"));
    
    输出:10
    

    strtok

    函数功能:分割字符串
    头 文 件:#include <string.h>
    定义函数:char * strtok(char *s, const char *delim);
    参数分析:s --> 需要分割的字符串 delim --> 分割字符(用什么符号作为分割标记)可以有多个字符
    返 回 值:成功 返回下一个分割后的字符串指针 如果已无从分割则返回 NULL

    strcat,strncat

    函数功能:连接两字符串,推荐使用strncat可以控制拼接的长度,避免越界/非法访问。
    头 文 件: #include <string.h>
    定义函数: char *strcat (char *dest, const char *src);
    char *strncat(char *dest, const char *src, size_t n);
    参数分析:dest --> 目标地址 src --> 需要拷贝的字符串 n --> 期望连接的长度
    返 回 值:返回参数 dest 的字符串起始地址

    char str[8] = "Hello" ;//指针STR 指向数据段中的常量区     
    char * p ="GZ2075";    
    strncat(str , p , sizeof(str)-strlen(str)-1); //可以使用 = 数组大小-实际已经使用的-1,-1是为了存''
    printf("%s
    " , str); 
    
    输出:HelloGZ    
    

    注意:
    1.无论如何字符串的末尾都应该以''结尾。
    2.当参数1的可用空间存不下参数2时,会发生段错误。

    strcpy / strncpy

    函数功能:拷贝字符串
    头 文 件:#include <string.h>
    定义函数:char *strcpy(char *dest, const char *src);
    char * strncpy(char *dest, const char *src, size_t n);
    参数分析:dest --> 目标地址 src --> 需要拷贝的字符串的路径 n --> 期望拷贝的数大小
    返 回 值:成功 返回参数 dest 的字符串起始地址

    char str[32] = "Hello&Even&GZ2075" ; // 指针STR 指向数据段中的常量区 
      
    char * str_1 = calloc( 1 , 32 ); 
    //str_1="Hello&Even&GZ2075";   // 错误,语法没问题,但是逻辑上不对,当前改变了STR1的指向 堆内存的入口地址被你搞丢了 
    strncpy(str_1,"Hello&Even&GZ2075",32 );//把"Hello&Even&GZ2075" 拷贝到str_1中(堆空间)   
    printf("str_1:%s
    " , str_1);
    char * p = "GZ2075"; 
    bzero(str, sizeof(str)); 
    printf("str:%s
    " , str);
    strcpy(str_1 , p);      // 不会检查内存空间大小 
    printf("str:%s
    " , str_1);
    // strncpy(str_1 , p , 32 ); // 控制拷贝的数据大小,在安全范围内 
    printf("str+8:%s
    ",str_1+8);//发现strcpy纯粹覆盖内容并没有清空,strlen + 1  --> 跳过GZ2075  + 结束符 
    
    输出:
    str_1:Hello&Even&GZ2075
    str:
    str:GZ2075
    str+8:en&GZ2075
    

    strcmp

    函数功能:字符串比较,strncmp会顺便清空后面的内容。加入实际数据只有8字节而n是32,则会把8字节后的数据清空为 0 
    头 文 件:#include <string.h>
    定义函数:int strcmp(const char *s1, const char *s2);
    int strncmp(const char *s1, const char *s2, size_t n);
    参数分析:s1 --> 需要比较的字符串1 s2 --> 需要比较的字符串1 n --> 需要比较的前N个字符
    返 回 值:返回 0 表示两个字符串相等, 返回 非零 表示两个字符串不同,返回值为第一个不同首字母的ASCII码的差值。

    char *str1 = "AAAAA";
    char *str12 = "AAA";
    int result = strcmp(str1, str2); //注意是str1-str2,传入参数与顺序有关
    printf("result = %d
    ", result);
    printf("result = %c
    ", result);  //返回不同的第一个字母在ascii上的差值,
    
    输出:
    65
    A
    

    strchr

    函数功能:查找字符串中第一个出现的指定字符
    头 文 件: #include <string.h>
    定义函数: char * strchr (const char *s, int c); // 从左往右
    char * strrchr (const char *s, int c); // 从右往左
    参数分析: s --> 需要查找的字符串 c --> 需要查找的字符(unsigned char )
    返 回 值: 成功 返回第一次出现的位置的地址 失败 返回 0

    char  p1[] = "Hello&Even"; 
    char * ret_val = strchr(p1 , 'e'); // 从左往右寻找
    printf("RetVal :%s 
    " , ret_val);
    
    ret_val = strrchr(p1 , 'e'); // 从左往右寻找
    printf("RetVal :%s 
    " , ret_val);
    
    输出:
    RetVal :ello&Even
    RetVal :en
    

    注意

    1.字符串函数传入的参数最好用字符数组定义,因为有些字符串处理函数,不允许传入字符指针;
    2.字符串函数返回地址,应该用字符指针接收;
    3.处理字符串时,要注意结尾是否加上了'',定义的字符数组的大小也应该能够容纳结束符''。

  • 相关阅读:
    JAVA开发环境配置
    Java volatile关键字解惑
    Java实验案例(接口)
    Java 实验案例(多态)
    Eclipse 快捷键大全
    全球免费开放的电子图书馆
    Java 实验案例(类和对象篇)
    Java IO流(二)
    Linux zsh 实用配置
    Js远程调用封装
  • 原文地址:https://www.cnblogs.com/ding-ding-light/p/14088767.html
Copyright © 2020-2023  润新知