c语言中显示文件自身

1、

复制代码
#include <stdio.h>
#include <ctype.h>

int main(void)
{
    int n;
    unsigned long count = 0;  // count初始值为0, 为什么是unsigned long? 
    unsigned char buf[16];  //字符数组为什么是unsigned? 
    FILE *fp;
    char fname[FILENAME_MAX];
    printf("filename: "); scanf("%s", fname);
    
    if((fp = fopen(fname, "rb")) == NULL)
        printf("\aFile open failed.\n");
    else
    {
        while((n = fread(buf, 1, 16, fp)) > 0)  // while语句,fread函数的返回值为循环控制条件,fread函数的返回值为从fp流中读取的字符数,循环次数等于
        //fp流中的总字符数除以每组个数16,如不能整除,则+ 1. 
        {
            int i;
            printf("%081X ", count);  // 使用占位为81的16进制数记录每一次循环 
            
            for(i = 0; i < n; i++)
                printf("%02X ", (unsigned)buf[i]); // 使用占位为2的16进制数显示每一次循环的每一个字符 
                
            if(n < 16)     // 当n不够16时, 使用空格填充 
                for(i = n; i < 16; i++)
                    printf(" ");
            
            for(i = 0; i < n; i++)   // 判断是否为可打印字符,如果是可打印字符,则输出,否则输出. 
                putchar(isprint(buf[i]) ? buf[i] : '.');
            
            putchar('\n');
            count += 16;  //十六进制记录循环次数 
        }
        fclose(fp);
    }
    return 0;
}
复制代码

 

posted @   小鲨鱼2018  阅读(69)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示