fwrite,但是在C中用字符串代替文件

时间:2016-08-24 20:20:51

标签: c string

我正在编写一个C程序来从相机中获取JPEG帧并用它做各种各样的事情。我有以下功能:

static void process_frame(const void *p, int size) {
        fwrite(p, size, 1, stdout);
}

它非常适合将帧写入stdout,但我真正需要的是这样的(“swrite”类似fwrite,但是char而不是文件):

static char* process_frame(const void *p, int size) {
        char* jpegframe;
        swrite(p, size, 1, jpegframe);
        return jpegframe;
}

不幸的是,没有swrite功能(至少不是我能找到的)。 所以......

是否有类似“swrite”功能的功能?

如何将process_frame函数与printf(因此sprintf)而不是fwrite一起使用?

2 个答案:

答案 0 :(得分:7)

char只是一个字符。你的意思是一个char缓冲区;而且!您的p已经是一个。只需使用(char*)p(将您的void指针强制转换为char指针),或memcpy p指向您选择的char缓冲区的内容。

Deamentiaemundi提出了一个很好的观点:你可能会p作为const void*出于某种原因;如果你打算修改数据,你肯定应该记住这些内容。

答案 1 :(得分:5)

在引擎盖下,似乎你的指针p只是一个很大的字节数组。您可以将其强制转换为char数组并使用它:

char *jpegframe = (char *) p;

如果您想修改框架,可能需要分配更多内存并将其复制到:

static char* process_frame(const void *p, int size) {
    char* jpegframe = malloc(size);
    memcpy(jpegframe, p, size);

    /* Do the processing... */

    return jpegframe;
}