c - fwrite 在每个输入后添加新行

标签 c fwrite

我想添加一个新行来分隔文件中的每个条目。

我尝试过:

show_dump(buff + "\n", len, dump_fd);

但是出现了错误。

我从其他地方得到这个函数,它将客户端发送的缓冲区格式化为十六进制和 ASCII 数据。

/*
Usage:
    show_dump(buffer, buffer_length, stdout);
    show_dump(buffer, buffer_length, fd);
*/

#include <string.h>



void show_dump(unsigned char *data, unsigned int len, FILE *stream) {
    const static char       hex[] = "0123456789abcdef";
    static unsigned char    buff[67];   /* HEX  CHAR\n */
    unsigned char           chr,
                            *bytes,
                            *p,
                            *limit,
                            *glimit = data + len;

    memset(buff + 2, ' ', 48);

    while(data < glimit) {
        limit = data + 16;
        if(limit > glimit) {
           limit = glimit;
           memset(buff, ' ', 48);
        }

        p     = buff;
        bytes = p + 50;
        while(data < limit) {
            chr = *data;
            *p++ = hex[chr >> 4];
            *p++ = hex[chr & 15];
            p++;
            *bytes++ = ((chr < ' ') || (chr >= 0x7f)) ? '.' : chr;
            data++;
        }
        *bytes++ = '\n';

        fwrite(buff, bytes - buff, 1, stream);
     }
}

这就是我创建文件的方式:

if(dump) {
    add = dumpfile;

    for(i = 1; ; i++) {
        sprintf(add, "%d.log", i);
        dump_fd = fopen(dumpfile, "rb");
        if(!dump_fd) break;
        fclose(dump_fd);
    }
    dump_fd = fopen(dumpfile, "wb");
    if(!dump_fd) std_err();

}

这就是我写入文件的方式:

if(dump_fd) show_dump(buff, len, dump_fd);
<小时/>

问题:代码有什么问题?为什么这些文件都是一起写的而不是逐行写的?

最佳答案

我想你可以将 '\n' 添加到缓冲区:

buff[strlen(buff)]='\n';
buff[strlen(buff)+1]='\0';

我想应该可以。

-编辑:

或者像评论中指出的那样(可能是更好的解决方案..),使用 strcat:

strcat(buff,"\n");

如果需要的话,用 if 语句封装它以防止溢出:

if (sizeof(buff) > strlen(buff)+1)

关于c - fwrite 在每个输入后添加新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16152580/

相关文章:

c - c语言中的可变长度数组替代

c - pcap_compile() 表达式

C 链表删除函数

c - 如何从数组中一次读取一个字节?

PHP 控制台脚本/传递默认参数/重构 fopen() fread() fwrite() fclose()

c - int 指针和 float 指针之间的奇怪区别

c - 在运行时获取数组的大小

swift - 在 Swift Playground 中写入文件时出错

c++ - 在 C++ 中使用 fread 从二进制文件中读取字符串及其长度

来自文件的 char* 的跨平台(反)序列化