今天看了一个实现16进制格式显示文件内容的程序,上机运行一把结果发现16进制没有完全显示出来,gdb调试之后发现是sprintf格式没有弄对,书上少印一个空格-_-! 废话少说,上代码: /* * ===================================================================================== * * Filename: myod.c * * Description: od * * Version: 1.0 * Created: 06/24/2011 02:52:00 PM * Revision: none * Compiler: gcc * * Author: YOUR NAME (), * Company: * * ===================================================================================== */ #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { int n, c; FILE *fp; char buf[101], hexbuf[101]; if (argc != 2) { fprintf(stderr, "Usage:%s filename/n", argv[0]); exit(0); } if ((fp = fopen(argv[1], "r")) == NULL) { perror("fopen"); exit(0); } n = 0; memset(buf, 0x00, sizeof(buf)); memset(hexbuf, 0x00, sizeof(hexbuf)); while ((c = fgetc(fp)) != EOF) { if (n > 15) { fprintf(stderr, "%-48s %s/n", hexbuf, buf); n = 0; memset(buf, 0x00, sizeof(buf)); memset(hexbuf, 0x00, sizeof(hexbuf)); } buf[n] = (unsigned char)c; sprintf(hexbuf + 3*n, "%02x ", c); n++; } fprintf(stderr, "%-48s %s/n", hexbuf, buf); fclose(fp); return 0; } 代码运行结果: [root@localhost linuxc]# ./myod ./stdout.redirect 54 68 69 73 20 69 73 20 61 20 74 65 73 74 20 6d This is a test m 65 73 73 61 67 65 2e 0a essage.