zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    SQL Azure (17) SQL Azure V12
    Microsoft Azure News(5) Azure新DV2系列虚拟机上线
    Azure Redis Cache (3) 在Windows 环境下使用Redis Benchmark
    Azure PowerShell (11) 使用自定义虚拟机镜像模板,创建Azure虚拟机并绑定公网IP(VIP)和内网IP(DIP)
    Windows Azure Virtual Machine (31) 迁移Azure虚拟机
    Windows Azure Web Site (16) Azure Web Site HTTPS
    Azure China (12) 域名备案问题
    一分钟快速入门openstack
    管理员必备的Linux系统监控工具
    Keepalived+Nginx实现高可用和双主节点负载均衡
  • 原文地址:https://www.cnblogs.com/iospp/p/5074660.html
Copyright © 2011-2022 走看看