开发者

C语言常用标准头文件使用实例

开发者 https://www.devze.com 2024-08-14 10:44 出处:网络 作者: 环能jvav大师
目录头文件的基础概念头文件原理常用头文件作用表常用标准头文件使用实例stdio.hstdlib.hstring.hmath头文件ctypetime.hassert.herrno.hlimits.hfloat.hstdbool.hstddef.hsetjmp.hsignal.hstdint.hinttypes.h总结头文
目录
  • 头文件的基础概念
  • 头文件原理
  • 常用头文件作用表
  • 常用标准头文件使用实例
    • stdio.h
    • stdlib.h
    • string.h
    • math头文件
    • ctype
    • time.h
    • assert.h
    • errno.h
    • limits.h
    • float.h
    • stdbool.h
    • stddef.h
    • setjmp.h
    • signal.h
    • stdint.h
    • inttypes.h
  • 总结

    头文件的基础概念

    在C的系列语言程序中,头文件(通常扩展名为.h)被大量使用,它通常包含函数、变量、结构体等的声明和定义,以及一些宏定义和类型定义。头文件的主要作用是为了方便管理和重用代码,它可以被多个源文件共享,从而实现代码的重用和模块化。

    头文件原理

    • 代码组织与模块化:在一个应用开发体系中,功能的真正逻辑实现通常是以硬件层为基础,在驱动程序、功能层程序以及用户的应用程序中完成的。头文件作为用户应用程序和函数库之间的桥梁和纽带,有助于将程序的不同部分组织成模块,每个模块负责完成特定的功能。
    • 声明与定义分离:头文件主要保存程序的声明,如函数原型、变量声明、结构体定义等,而定义文件(通常扩展名为.c)则保存程序的实现。这种分离使得代码结构更清晰,同时python也方便代码的复用和修改。
    • 防止定义冲突:头文件通过预处理指令(如ifndef/define/endif)来防止重复包含同一个头文件,从而避免定义冲突。
    • 代码复用:由于头文件可以被多个源文件包含,因此它提供了一种方便的代码复用机制。程序员可以将一些常用的函数声明、变量声明和宏定义放在头文件中,然后在需要的地方包含这个头文件,从而避免重复编写相同的代码。
    • 类型定义与内联函数:头文件可能包含自定义的数据类型定义和内联函数的定义。这些类型可以在整个程序中使用,而内联函数则可以在编译时进行展开,从而提高程序的执行效率。
    • 编译时链接:在编译时,编译器会查找头文件中声明的函数和变量,并将其与实际定义进行链接。这种链接过程确保了在硬件层面实现功能时能够找到正确的代码实现。

    常用头文件作用表

    头文件作用关键函数/宏/类型
    <stdio.h>标准输入输出库printf()scanf()fgets()fputs()fopen()fclose()snprintf()vprintf() 等
    <stdlib.h>常用函数库malloc()free()exit()rand()srand()abs()div()lldiv() 等
    <string.h>字符串处理库strlen()strcpy()strcat()strcmp()strstr()memcpy()memset() 等
    <math.h>数学函数库sin()cos()tan()sqrt()pow()log()exp()ceil()floor() 等
    <ctype.h>字符处理库isalpha()isdigit()isupper()tolower()toupper() 等
    <time.h>时间处理库time()localtime()strftime()gmtime()difftime()mktime()clock() 等
    <assert.h>断言库assert()
    <errno.h>错误号定义库errno(全局变量)
    <limits.h>数据类型属性库INT_MAXINT_MINCHAR_MAXCHAR_MINSIZE_MAX 等
    <float.h>浮点数属性库FLT_MAXDBL_MAXLDBL_MAXFLT_EPSILONDBL_EPSILON 等
    <stdbool.h>布尔类型库booltruefalse
    <stddef.h>标准定义库size_tNULLoffsetof()ptrdiff_t 等
    <setjmp.h>非局部跳转库setjmp()longjmp()
    <signal.h>信号处理库signal()raise()
    <stdint.h>固定宽度整数类型库int8_tint16_tint32_tint64_tuint8_tuint16_tuint32_tuint64_t 等
    <inttypes.h>整数类型格式化库PRId8PRIu8PRIX8PRId16PRIu16PRIX16, … 等宏用于printfscanf系列函数

    常用标准头文件使用实例

    stdio.h

    制作一个简易的的四则运算小计算器,使用stdio.h头文件中的printf()函数和scanf()函数

    #include <stdio.h>  
      
    int main() {  
        double num1, num2;  
        char operator;  
        double result;  
    
        printf("请输入第一个数字: ");  
        scanf("%lf", &num1); // 使用%lf读取double类型  
      
        printf("请输入运算符 (+, -, *, /): ");  
        scanf(" %c", &operator); // 前面的空格用于跳过任何之前的空白字符  
      
        printf("请输入第二个数字: ");  
        scanf("%lf", &num2);  
      
        switch (operator) {  
            case '+':  
                result = num1 + num2;  
                break;  
            case '-':  
                result = num1 - num2;  
                break;  
            case '*':  
                result = num1 * num2;  
                break;  
            case '/':  
                if (num2 != 0.0) {  
                    result = num1 / num2;  
                } else {  
                    printf("错误:除数不能为0\n");  
                    return 1; // 非零返回值表示程序异常退出  
                }  
                break;  
            default:  
                printf("错误:无效的运算符\n");  
                return 1;  
        }  
      
        printf("%.2lf %c %.2lf = %.2lf\n", num1, operator, num2, result);  
        return 0; 
    }
    

    C语言常用标准头文件使用实例

    stdlib.h

    使用stdlib.h头文件,根据用户输入的整数来分配动态内存分配。

    #include <stdio.h>  
    #include <stdlib.h>  
      
    int main() {  
        int n, *ptr, i;  
      
        printf("请输入一个整数n: ");  
        scanf("%d", &n);  
      
        // 动态分配内存以存储n个整数  
        ptr = (int*)malloc(n * sizeof(int));  
      
        if (ptr == NULL) {  
            printf("内存分配失败!\n");  
            exit(EXIT_FAILURE); // 退出程序  
        }  
      
        // 初始化数组  
        for (i = 0; i < n; ++i) {  
            ptr[i] = i + 1;  
        }  
      
        printf("数组元素为: ");  
        for (i = 0; i < n; ++i) {  
            printf("%d ", ptr[i]);  
        }  
        pythonprintf("\n");  
        // 释放分配的内存  
        free(ptr);  
        return 0;  
    }
    

    C语言常用标准头文件使用实例

    string.h

    使用string.h头文件拼接两个字符

    #include <stdio.h>  
    #include <string.h>  
      
    int main() {  
        char str1[50], str2[50];  
      
        printf("请输入第一个字符串: ");  
        fgets(str1, sizeof(str1), stdin); // 读取字符串,包括换行符  
        str1[strcspn(str1, "\n")] = 0; // 移除字符串末尾的换行符  
      
        printf("请输入第二个字符串: ");  
        fgets(str2, sizeof(str2), stdin);  
        str2[strcspn(str2, "\n")] = 0;  
      
        // 连接两个字符串  
        strcat(str1, str2);  
        printf("连接后的字符串为: %s\n", str1);  
        return 0;  
    }
    

    C语言常用标准头文件使用实例

    math头文件

    使用math.h头文件计算圆的面积和周长

    #include <stdio.h>  
    #include <math.h>  
    
    #define M_PI 3.14159265358979323846 
     
    int main() {  
        double radius, area, circumference;  
      
        printf("请输入圆的半径: ");  
        scanf("%lf", &radius);  
        // 计算圆的面积  
        area = M_PI * radius * radius; // 使用预定义的M_PI常量  
        // 计算圆的周长  
        circumference = 2 * M_PI * radius;  
      
        printf("圆的面积为:编程客栈 %.2lf\n", area);  
        printf("圆的周长为: %.2lf\n", circumference);  
      
        return 0;  
    }
    

    C语言常用标准头文件使用实例

    ctype

    使用ctype.h进行字符处理,转换输入字符的大小写

    #include <stdio.h>  
    #include <ctype.h>  
      
    int main() {  
        char ch;  
      
        printf("请输入一个字符: ");  
        scanf(" %c", &ch); 
      
        // 判断字符类型  
        if (isalpha(ch)) {  
            printf("这是一个字母字符\n");  
        } else if (isdigit(ch)) {  
            printf("这是一个数字字符\n");  
        } else if (isspace(ch)) {  
            printf("这是一个空白字符\n");  
        } else {  
            printf("这是一个特殊字符\n");  
        }  
      
        // 转换字符大小写
        if (isalpha(ch)) {  
            ch = isupper(ch) ? tolower(ch) : toupper(ch);  
            printf("转换后的字符为: %c\n", ch);  
        }  
      
        return 0;  
    }
    

    C语言常用标准头文件使用实例

    time.h

    获取当前时间

    #include <stdio.h>
    #include <time.h>
    
    int main() {
        // 获取当前时间
        time_t current_time;
        current_time = time(NULL);
    
        // 将time_t转换为本地可读的字符串格式
        char* c_time_string = ctime(&current_time);
        printf("当前时间是: %s", c_time_string);
    
        return 0;
    }
    

    C语言常用标准头文件使用实例

    assert.h

    程序调试断言

    #include <stdio.h>
    #include <assert.h>
    
    int main() {
        int x = 5;
        int y = 0;
    
        // 使用assert进行调试断言
        assert(y != 0); // y为0所以会触发断言失败,
    
        // 如果断言成功,程序继续执行,如果断言失败,程序会打印一条错误消息并终止执行
        int z = x / y;
        phpprintf("z的值为: %d\n", z); // 这行不会被执行
    
        return 0;
    }
    

    C语言常用标准头文件使用实例

    errno.h

    错误处理

    #include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <string.h>
    
    int main() {
        FILE *fp = fopen("test.txt", "r");
    
        if (fp == NULL) {
            // 使用errno获取并打印最后发生的系统调用的错误号
            printf("打开文件失败: %s\n", strerror(errno));
            exit(EXIT_FAILURE);
        }
        fclose(fp);
        return 0;
    }
    

    limits.h

    查看数据类型限制

    #include <stdio.h>
    #include <limits.h>
    
    int main() {
        // 打印整型变量的范围
        printf("int的最大值为: %d\n", INT_MAX);
        printf("int的最小值为: %d\n", INT_MIN);
    
        // 打印无符号整型变量的范围
        printf("unsigned int的最大值为: %u\n", UINT_MAX);
        return 0;
    }
    

    C语言常用标准头文件使用实例

    float.h

    查看浮点型限制

    #include <stdio.h>
    #include <float.h>
    
    int main() {
        // 打印float类型的最大和最小值
        printf("float的最大正有限值为: %e\n", FLT_MAX);
        printf("float的最小正有限值为: %e\n", FLT_MIN);
        // 打印double类型的最大和最小值
        printf("double的最大正有限值为: %e\n", DBL_MAX);
        printf("double的最小正有限值为: %e\n", DBL_MIN);
        // 打印float类型的精度
        printf("float的精度(epsilon): %e\n", FLT_EPSILON);
        return 0;
    }
    

    C语言常用标准头文件使用实例

    stdbool.h

    布尔类型

    #include <stdio.h>
    #include <stdbool.h>
    
    int main() {
        bool flag = true;
    
        if (flag) {
            printf("标志是 true\n");
        } else {
            printf("标志是 false\n");
        }
    
        flag = false;
        if (!flag) {
            printf("现在标志是 false\n");
        }
    
        return 0;
    }
    

    C语言常用标准头文件使用实例

    stddef.h

    标准定义

    #include <stdio.h>
    #include <stddef.h>
    
    int main() {
        // 使用size_t类型,它是用于数组索引和循环计数的无符号整数类型
        size_t arraySize = 10;
        int array[arraySize];
    
        // 使用ptrdiff_t类型,它是两个指针相减的结果的类型
        int *ptr1 = array;
        int *ptr2 = &array[5];
        ptrdiff_t diff = ptr2 - ptr1;
        printf("ptr2和ptr1之间的差是: %td\n", diff);
    
        // 使用NULL宏作为指针的空值
        int *nullPtr = NULL;
        if (nullPtr == NULL) {
            printf("nullPtr 是 NULL\n");
        }
    
        return 0;
    }
    

    C语言常用标准头文件使用实例

    setjmp.h

    非局部跳转

    #include <stdio.h>
    #include <setjmp.h>
    
    jmp_buf env;
    
    void function() {
        longjmp(env, 1); // 非局部跳转回setjmp的位置
    }
    
    int main() {
        if (setjmp(env) != 0) { // 如果longjmp被调用,setjmp返回非零值
            printf("Longjmp was called!\n");
        } else {
            printf("About to call function...\n");
            function(); // 这个调用会导致longjmp被触发
        }
    
        return 0;
    }
    

    C语言常用标准头文件使用实例

    signal.h

    信号处理,通过按下Ctrl+C来发送SIGINT信号触发signalHandler函数

    #include <stdio.h>
    #include <signal.h>
    #inclqJmjsGSude <unistd.h>
    
    void signalHandler(int signum) {
        printf("接收到信号 %d\n", signum);
        exit(signum);
    }
    
    int main() {
        // 注册信号SIGINT和处理函数
        signal(SIGINT, signalHandler);
        while(1) {
            printf("运行中...\n");
            sleep(1);
        }
    
        return 0;
    }
    

    C语言常用标准头文件使用实例

    stdint.h

    固定宽度整数类型

    #include <stdio.h>
    #include <stdint.h>
    
    int main() {
        int8_t int8 = 127; // 8位有符号整数
        uint8_t uint8 = 255; // 8位无符号整数
        int16_t int16 = 32767; // 16位有符号整数
        uint32_t uint32 = 4294967295U; // 32位无符号整数
        int64_t int64 = 9223372036854775807LL; // 64位有符号整数
    
        printf("int8: %d\n", int8);
        printf("uint8: %u\n", uint8);
        printf("int16: %d\n", int16);
        printf("uint32: %u\n", uint32);
        printf("int64: %lld\n", int64);
    
        return 0;
    }
    

    C语言常用标准头文件使用实例

    inttypes.h

    整数类型格式化

    #include <stdio.h>
    #include <inttypes.h>
    
    int main() {
        uint32_t number = 123456789U;
    
        // 使用inttypes.h中定义的宏来格式化输出
        printf("使用PRIu32: %" PRIu32 "\n", number);
        return 0;
    }
    

    C语言常用标准头文件使用实例

    总结

    到此这篇关于C语言常用标准头文件使用的文章就介绍到这了,更多相关C语言常用标准头文件内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号