zoukankan      html  css  js  c++  java
  • C标准库简单解读

    1,程序运行时动态链接共享库;

    libc(character),libm(math),使用标准库的函数;

    eg:stdlib.h exit();

    size_t数据类型,NULL空指针在头文件stddef.h define;

    malloc,free stdlib.h

    string.h strcat strcpy,strncpy;

    程序按功能划分可分为数值运算,符号处理和I/O操作三类;

    下面将测试使用相应的库函数做字符串初始化,取长度,拷贝,连接,搜索,比较;

    1,  初始化字符串

    #include <string.h>

    void *memset(void *s,int c,size_t n);

      返回值:s指向那,返回的指针就指向那,

     s指向内存地址,c为在需在内存中填充的值,通常c=0,n为要填充的字节数;

    需要初始化字符串的应用环境

    函数的局部变量,初值不确定,可以用memset(buf, 0, 10),char buf[10]清零,malloc分配的内存初值也是不确定的,也可以用memset清零;

    全局变量或静态变量则会自动化清零(位于.bss段);

    2,  取字符串长度

    #include <string.h>
    size_t strlen(const char *s);

      返回值:字符串的长度;

    3,  内存字符串拷贝

    #include <string.h>
    void *memcpy(void *dest,const void *src,size_t n);
    void *memmove(void *dest,const void *src,size_t n);
        返回值:dest指向那,返回指针就指向那;

    memcpy函数从src所指向的内存地址拷贝n个字节到dest所指向的内存地址;

    以str开头的函数(eg:strcat,strcpy,strncpy)处理以''结尾的字符串,而以mem开头的函数(memcpy,memncpy)则不关心''字符,或者说这些函数并
    不把参数当字符串看待,因此参数的指针类型是void *而非char *。

    memmove也是从src所指的内存地址拷贝n个字节到dest所指的内存地址,虽然叫move但其实也是拷贝而非移动。但是和memcpy有一点不同,memcpy的两个参数src和dest所指的内存区间如果重叠则无法保证正确拷贝,而memmove却可以正确拷贝;

    数组元素2中方式枚举

    4,  字符串连接

    char *strcat(char *dest,const char *src);

    char *strncat(char *dest,const char *src,size_t n);

    注意我们之前说过,str开头的函数对于''的问题看官应该还记得;

    [再请看官注意,dest缓冲区的Strlen长度应该是strlen(dest)+n+!]

    5,  比较字符串

    #include <string.h>

    int memcmp(const void *s1,const void *s2,size_t n);

    int strcmp(const char *s1,const char *s2);

    int strncmp(const char *s2,const char *s2,size_t n);

    返回值:负值表示s1<s2,0表示s1 == s2,正值表示s1>s2(值是Ascii表中的值)

    memcmp从前到后逐个比较缓冲区s1,s2返回值(不管字符串中间是否有'');

    strncmp的比较条件是:要么在其中一个字符串中遇到''结束,要么比较完n个字符串;

    #include <strings.h>

    int strcasecmp(const char *s1,const char *s2);

    int strncasecmp(const char *s1,const char *s2,size_t n);此处再解释下为何用size_t n是因为n是有符号的,可以为0 -1等,-1表示错误;

    在比较过程中忽略大小写;此处不是C标准库,是POSIX标准;

    6,  搜索字符串

    char *strchr(const char *s,int c);

    char *strrchr(const char *s,int c);

    返回值:找到字符c,返回字符串s中指向字符c的指针,如果找不到字符c就返回NULL;

    right-to-left;

    查找字符串

    #include <string.h>

    char *strstr(const char *haystck,const hcar *needle);

    strstr在一个长字符串中从前到后找一个子串(Substring);

    7,  分割字符串

    分隔符/界定符(delimiter);

    #include <string.h>

    char *strtok(char *str,const char *delim);

    char *strtok r(char *str,const char *delim,char **saveptr);

  • 相关阅读:
    [HDU3247]Resource Archiver
    [POJ2243]考研路茫茫——单词情结
    [POJ2778]DNA Sequence
    [bzoj3670] [Noi2014]动物园
    [bzoj3786] 星系探索
    [bzoj1493] [NOI2007]项链工厂
    postgreSQL的设置自增主键初始值
    postgreSQL绝对值
    GitHub上新建或删除仓库Repository
    Intellij Idea上传本地项目到Git
  • 原文地址:https://www.cnblogs.com/ruiy/p/lib.html
Copyright © 2011-2022 走看看