美文网首页
常用的C标准库函数

常用的C标准库函数

作者: 付凯强 | 来源:发表于2021-12-07 15:06 被阅读0次

    整理常见的C标准库函数。会不断更新。

    • strcpy
    • sprintf
    • puts
    • memset
    • snprintf
    • printf
    • malloc
    • realloc
    • strcat
    • strstr

    strcpy

    char *strcpy(char *dest, const char *src)
    

    把 src 所指向的字符串复制到 dest,返回一个指向最终的目标字符串 dest 的指针。

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
        char src[40];
    
        strcpy(src, "This is runoob.com");
    
        printf("最终的目标字符串: %s\n", src);
    
        return(0);
    }
    
    最终的目标字符串: This is runoob.com
    

    sprintf

    int sprintf(char *str, const char *format, ...)
    
    • str -- 这是指向一个字符数组的指针,该数组存储了 C 字符串。
    • format -- 格式化后的字符串

    把格式化后的字符串存储到到 str 所指向的字符串。
    如果成功,则返回写入的字符总数,不包括字符串追加在字符串末尾的空字符。如果失败,则返回一个负数。

    #include <stdio.h>
    #include <math.h>
    
    int main()
    {
        char str[80];
    
        sprintf(str, "Pi 的值 = %f", M_PI);
        puts(str);
    
        return(0);
    }
    
    Pi 的值 = 3.141593
    

    puts

    int puts(const char *str) // str -- 这是要被写入的 C 字符串
    

    把一个字符串写入到标准输出 stdout,直到空字符,但不包括空字符。换行符会被追加到输出中。
    如果成功,该函数返回一个非负值为字符串长度(包括末尾的 \0),如果发生错误则返回 EOF。

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
        char str1[15];
        char str2[15];
    
        strcpy(str1, "BEIJING");
        strcpy(str2, "SHANGHAI");
    
        puts(str1);
        puts(str2);
    
        return(0);
    }
    
    BEIJING
    SHANGHAI
    

    memset

    void *memset(void *str, int c, size_t n)
    

    复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。
    注意:要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。
    该值返回一个指向存储区 str 的指针。

    #include <stdio.h>
    #include <string.h>
    
    int main ()
    {
        char str[50];
    
        strcpy(str,"This is string.h library function");
        puts(str);
    
        memset(str,'$',7);
        puts(str);
    
        return(0);
    }
    
    This is string.h library function
    $$$$$$$ string.h library function
    

    snprintf

    int snprintf ( char * str, size_t size, const char * format, ... );
    

    设将可变参数(...)按照 format 格式化成字符串,并将字符串复制到 str 中,size 为要写入的字符的最大数目,超过 size 会被截断.
    参数含义:
    str -- 目标字符串,size -- 拷贝字节数(Bytes),format -- 格式化成字符串,... -- 可变参数.
    返回值含义:
    1.如果格式化后的字符串长度小于 size,则会把字符串全部复制到 str 中,并给其后添加一个字符串结束符 \0.
    2.如果格式化后的字符串长度大于等于 size,超过 size 的部分会被截断,只将其中的 (size-1) 个字符复制到 str 中,并给其后添加一个字符串结束符 \0,返回值为欲写入的字符串长度.
    示例:

    #include <stdio.h>
    
    int main()
    {
        char buffer[50];
        char* s = "runoobcom";
    
        // 读取字符串并存储在 buffer 中
        int j = snprintf(buffer, 6, "%s\n", s);
    
        // 输出 buffer及字符数
        printf("string:\n%s\ncharacter count = %d\n", buffer, j);
    
        return 0;
    }
    
    string:
    runoo
    character count = 10
    

    printf

    • %p会把值作为一个地址输出。
    int i=0; printf("%p",&i); 执行结果: 0xbffb2d6a 。%p是将&i这个值作为地址输出,并以0x开头16进制类型输出出来
    
    • %u对int型和unsigned int型都可以,表示输入输出格式为无符号int型。
    int a=-1; unsigned int b ;
    b=a; printf("%d\t %u\t %d\t %u",a,a,b,b); \\ \t是制表符,
    执行结果:-1 4294967295 -1 4294967295
    
    • %lu对unsigned long型,无符号长整数型

    malloc

    void *malloc(size_t size)
    

    函数说明: 分配所需的内存空间,并返回一个指向它的指针.
    参数说明: size: 内存块的大小,以 字节 为单位。
    返回值说明: 返回一个void指针,如果分配失败,返回 NULL。
    示例:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int main()
    {
        char *c;
        c = (char*)malloc(sizeof(char));
        strcpy(c,"helloworld");
        printf("c = %s.",c);
        free(c);
        return 0;
    }
    

    realloc

    void *realloc(void *ptr, size_t size)
    

    函数说明: 尝试重新调整之前调用 malloc 或 calloc 所分配的 ptr 所指向的内存块的大小.
    参数说明:

    1. ptr: 指针指向一个要重新分配内存的内存块,该内存块之前是通过调用 malloc、calloc 或 realloc 进行分配内存的。如果为空指针,则会分配一个新的内存块,且函数返回一个指向它的指针.
    2. size: 内存块的新的大小,以字节为单位。如果大小为 0,且 ptr 指向一个已存在的内存块,则 ptr 所指向的内存块会被释放,并返回一个空指针.

    返回值说明:
    该函数返回一个指针 ,指向重新分配大小的内存。如果请求失败,则返回 NULL.
    示例:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int main()
    {
        char *c;
        c = (char*)malloc(sizeof(char));
        strcpy(c,"helloworld");
        printf("malloc c = %s.\n",c);
    
        c = (char*)realloc(c,2 * sizeof(char));
        strcat(c,"+hellobeijing");
        printf("realloc c = %s.\n",c);
        
        free(c);
        return 0;
    }
    
    malloc c = helloworld.
    realloc c = helloworld+hellobeijing.
    

    strcat

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

    函数说明: 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾.
    参数说明:

    1. dest: 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串.
    2. src: 指向要追加的字符串,该字符串不会覆盖目标字符串.

    返回值:
    该函数返回一个指向最终的目标字符串 dest 的指针.
    示例:

    同上一个示例.
    

    strstr

    char *strstr(const char *haystack, const char *needle)
    

    C 库函数 char *strstr(const char *haystack, const char *needle) 在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 '\0'其中haystack是要被检索的 C 字符串,needle是在 haystack 字符串内要搜索的小字符串。该函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null。参数和返回值都是指针类型。

    #include <stdio.h>
    #include<string.h>
    
    int main()
    {
        const char* p1 = "abcdefgh";//"abcdefgh"是常属性字符串,里面的内容无法被改变,在char*前加const
        const char* p2 = "def";
        const char* p3 = "hello";
        char* ret = strstr(p1, p2);//把返回的字符串首地址赋给ret
        char* ret1 = strstr(p1, p3);//把返回的字符串首地址赋给ret
        if (ret == NULL)
        {
            printf("ret = 子串不存在\n");//当返回的字符串首地址为空,ret为一个空指针,代表不存在该子串
        }
        else
        {
            printf("ret = %s\n", ret);//当返回的字符串首地址不为空,则会从字符串首地址开始打印,到‘\0’停止
        }
        if (ret1 == NULL)
        {
            printf("ret1 = 子串不存在\n");//当返回的字符串首地址为空,ret为一个空指针,代表不存在该子串
        }
        else
        {
            printf("ret1 = %s\n", ret1);//当返回的字符串首地址不为空,则会从字符串首地址开始打印,到‘\0’停止
        }
        return 0;
    }
    
    ret = defgh
    ret1 = 子串不存在
    

    参考:
    https://blog.csdn.net/weixin_62677583/article/details/121353929
    https://www.runoob.com/cprogramming/c-function-strstr.html

    相关文章

      网友评论

          本文标题:常用的C标准库函数

          本文链接:https://www.haomeiwen.com/subject/nzgoxrtx.html