• C语言常用的库函数


    printf和scanf就不说了

    字符串输出函数:puts

    /*
     格式: puts(字符数组名)
     功能:把字符数组中的字符串输出到显示器。 即在屏幕上显示该字符串。
     
     从程序中可以看出puts函数中可以使用转义字符,因此输出结果成为两行。puts函数完全可以由 printf函数取代。当需要按一定格式输出时,通常使用printf函数。
     */
    
    #include <stdio.h>
    
    int main(int argc, const char * argv[]) {
        char str[]="中文中文中文中文中文中文中文
    ";
        puts(str);
        return 0;
    }

    字符串输入函数:gets

    /*
     格式: gets (字符数组名)
     功能:从标准输入设备键盘上输入一个字符串。
     
     本函数得到一个函数值,即为该字符数组的首地址。 可以看出当输入的字符串中含有空格时,输出仍为全部字符串。说明gets函数并不以空格作为字 符串输入结束的标志,而只以回车作为输入结束。这是与scanf函数不同的。
     */
    
    #include <stdio.h>
    
    int main(int argc, const char * argv[]) {
        char str[30];
        gets(str);
        puts(str);
        return 0;
    }

    字符串连接函数:strcat

    /*
     格式: strcat(字符数组名1,字符数组名2) 
     功能:把字符数组2中的字符串连接到字符数组1 中字符串的后面,并删去字符串1后的串标志 “”。本函数返回值是字符数组1的首地址。
     
     本程序把初始化赋值的字符数组与动态赋值的字符串连接起来。要注意的是,字符数组1应定义足 够的长度,否则不能全部装入被连接的字符串。
     */
    
    #include <stdio.h>
    
    int main(int argc, const char * argv[]) {
        char str1[200]="str1";
        char str2[10];
        gets(str2);
        strcat(str1,str2);
        puts(str1);
        return 0;
    }

    字符串拷贝函数:strcpy

    /*
     格式: strcpy(字符数组名1,字符数组名2) 
     功能:把字符数组2中的字符串拷贝到字符数组1中。串结束标志“”也一同拷贝。字符数名2, 也可以是一个字符串常量。这时相当于把一个字符串赋予一个字符数组。
     
     本函数要求字符数组1应有足够的长度,否则不能全部装入所拷贝的字符串。
     */
    
    #include <stdio.h>
    
    int main(int argc, const char * argv[]) {
        char str1[]="str1111";
        char str2[]="str2222";
        strcpy(str1, str2);
        puts(str1);
        return 0;
    }

    字符串比较函数:strcmp

    /*
     格式: strcmp(字符数组名1,字符数组名2) 
     功能:按照ASCII码顺序比较两个数组中的字符串,并由函数返回值返回比较结果。
        字符串1=字符串2,返回值=0;
        字符串1>字符串2,返回值>0;
        字符串1<字符串2,返回值<0。
     本函数也可用于比较两个字符串常量,或比较数组和字符串常量。
     */
    
    #include <stdio.h>
    #include <string.h>
    
    int main(int argc, const char * argv[]) {
        char str1[]="abce";
        char str2[]="abcd";
        int result = strcmp(str1, str2);
        printf("%d
    ",result);
        return 0;
    }

    测字符串长度函数:strlen

    /*
     格式: strlen(字符数组名)
     功能:测字符串的实际长度(不含字符串结束标志‘’)并作为函数返回值。
     */
    
    #include <stdio.h>
    #include <string.h>
    
    int main(int argc, const char * argv[]) {
        char str[]="a";
        long int result = strlen(str);
        printf("%ld
    ",result);
        return 0;
    }

    fgets()函数

    /*
     fgets的原型是
     char* fgets(char* s, int n, FILE* fp); 参数数量比较多,有3个。而fgets相比于gets有一个显著的差别就是fgets会将行末的换行符算到 读入的字符串里面。所以相同且正常(输入无错误,缓冲区够大)的情况下,fgets读入的字符串 会比gets在末尾''前面多一行符;行长度超出缓冲区大小时只读入前 n-1 个字符。
     因此,
     gets(s); 相当于
     fgets(s, sizeof(s), stdin);
     */
    
    /*
     fgets()、fputs()最大的优点是帮我们自动截取输入的字符串,使得我们对字符串的存取是安全 的
     */
    
    #include <stdio.h>
    
    int main(int argc, const char * argv[]) {
        char str[5];
        fgets(str, sizeof(str), stdin);
        puts(str);
        return 0;
    }

    fputs()函数

    /*
     fputs(将一指定的字符串写入文件内)
     相关函数 fopen,fwrite,fscanf,fputc,putc
     表头文件 #include<stdio.h>
     定义函数 int fputs(const char * s,FILE * stream);
     函数说明 fputs()用来将参数s所指的字符串写入到参数stream所指的文件内。 返回值 若成功则返回写出的字符个数,返回EOF则表示有错误发生。
     fputs(names, stdout);
     1) 输出到控制台
     2) 不会换行的
     */
    
    /*
     fgets()、fputs()最大的优点是帮我们自动截取输入的字符串,使得我们对字符串的存取是安全 的
     */
    
    #include <stdio.h>
    
    int main(int argc, const char * argv[]) {
        char str[5];
        fgets(str, sizeof(str), stdin);
        fputs(str, stdout);
        return 0;
    }

    动态内存分配函数

    /*
     C语言中提供了3个动态内存分配函数:
     
     1)malloc 函数
     
     格式: void * malloc(unsigned size);
     
     从内存的堆区分配大小为size个字节的连续的内存空间
     如果内存分配成功  返回内存的首地址
     
     失败  NULL
     
     */
    
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    /**
     *  malloc函数的使用
     */
    void test1(){
        
        //从内存中申请一块内存空间,可以存储4个整数
        // = 赋值,要求等号的左右两侧的类型要一致
        //p中存放的事新申请的内存空间的首地址
        //注意:malloc 申请的内存空间,如果我们不赋值?
        //     是垃圾数
        int *p = (int *)malloc(4*sizeof(int));   //16个字节
        
        //使用一个函数给malloc申请的空间进行初始化
        memset(p,'a',16);
        
        if (p!=NULL) {
            
            //申请成功做的事情
            //        *p = 10;
            //        *(p+1) = 100;
            //        *(p+2) = 1000;
            //        *(p+3) = 10000;   //存放4个整数
            
        }else{
            //内存申请失败
            printf("内存申请失败!
    ");
            
        }
        
        for(int i=0;i<4 ;i++){
            
            printf("%c	",*(p+i));
            
        }
        
    }
    
    
    void test2(){
        malloc(100);
        
        //callloc 分配指定块数和长度的内存空间
        //格式:calloc(块数,长度)
        //分配了4块,每一块内存长度为4的内存空间
        //他们的地址也是连续的
        
        //注意事项:
        //calloc 它使可以帮我们自动的初始化为0
        int *p = (int *)calloc(4, sizeof(int));   //16个字节
        
        if (p!=NULL) {
            
            //申请成功做的事情
            *p = 10;
            *(p+1) = 100;
            *(p+2) = 1000;
            *(p+3) = 10000;   //存放4个整数
            
        }else{
            //内存申请失败
            printf("内存申请失败!
    ");
            
        }
        
        for(int i=0;i<4 ;i++){
            
            printf("%d	",*(p+i));
            
        }
    }
    
    int main(int argc, const char * argv[]) {
        
        int *p = (int *)malloc(4*sizeof(int));   //16个字节
        printf("old %p
    ",p);
        
        //realloc 函数可以给已经存在的空间扩充大小
        p = realloc(p, 40*sizeof(int));
        printf("new %p
    ",p);
        //40个内存空间
        if (p!=NULL) {
            
            //申请成功做的事情
            *p = 10;
            *(p+1) = 100;
            *(p+2) = 1000;
            *(p+3) = 10000;   //存放4个整数
            
            *(p+39)= 1;
            printf("%d
    ",*(p+39));
            
        }else{
            //内存申请失败
            printf("内存申请失败!
    ");
            
        }
        
        for(int i=0;i<4 ;i++){
            
            printf("%d	",*(p+i));
            
        }
        
        return 0;
    }

    free函数

    /*
     野指针和内存泄露,free函数使用
     注意:free(p) 后,一定要再把 p 赋值为 NULL 
        free(p);
        p = NULL;
     */
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, const char * argv[]) {
        
        int *p = (int *)malloc(4*sizeof(int));   //16个字节
        
        if (p!=NULL) {
            
            //申请成功做的事情
            *p = 10;
            *(p+1) = 100;
            *(p+2) = 1000;
            *(p+3) = 10000;   //存放4个整数
            
            
        }else{
            //内存申请失败
            printf("内存申请失败!
    ");
            
        }
        
        //应该使用free()函数释放内存空间
        //free(要释放的空间的首地址)
        
        printf("释放前 %p
    ",p);
        
        //        free(p);          // 补充: 代表的是p指向那块空间可以被重新利用
        //free(p)以后,p是一个野指针
        //    p = NULL;
        //    *p = 100;
        
        // 补充:
        int *p2 = (int *)malloc(4*sizeof(int));
        printf("释放后 %p
    ",p);
        
        printf("p2地址: %p",p2);
        
        return 0;
    }
  • 相关阅读:
    C# -- HttpWebRequest 和 HttpWebResponse 的使用
    C# -- Lambda 表达式的使用
    ASP.NET -- WebForm -- HttpRequest类的方法和属性
    ASP.NET -- WebForm -- HttpResponse 类的方法和属性
    C# -- 索引器、枚举类型
    C#设计模式之七桥接模式(Bridge Pattern)【结构型】
    C#设计模式之六适配器模式(Adapter Pattern)【结构型】
    C#设计模式之五原型模式(Prototype Pattern)【创建型】
    C#设计模式之四建造者模式(Builder Pattern)【创建型】
    C#设计模式之三抽象工厂模式(AbstractFactory)【创建型】
  • 原文地址:https://www.cnblogs.com/iospp/p/5074660.html
Copyright © 2020-2023  润新知