gpt4 book ai didi

C:读取图像并将其存储在包含零的字符数组中

转载 作者:行者123 更新时间:2023-11-30 20:30:48 25 4
gpt4 key购买 nike

我目前正在用 C 语言开发一个 HTTP Web 服务器,它已经能够响应 .html 和 .css 文件。因此,我使用 fread 从文件中读取内容并将内容存储在 char 数组中。

char *body_pointer = malloc(fsize + 1); //fsize being my files size
//checking content_type of file, but for opening images as binary.

if (!strcmp(content_type, "image/jpeg") || !strcmp(content_type, "image/png") ) {
strcpy(open_as, "rb");
} else {
strcpy(open_as, "r");
}

FILE *fp = fopen(path, open_as);

if (fp != NULL) {
do {
bytes = fread(body_pointer, 1, chunk, fp);
body_pointer += bytes;
} while (bytes == chunk);
fclose(fp);
*body_pointer = '\0';
}

然后我使用 strcat 将文件内容添加到 header 字符串:

strcat(response_pointer, body_start_pointer); //response_pointer is the pointer to the array already holding the header.

然后我循环遍历response_pointer,将内容存储在数组中并发送我的响应:

write(new_socket, response, strlen(response)); //response is the array holding the response, new_socket is the socket.

如上所述,使用 .html 和 .css 文件一切正常,但使用 .pgn 和 .jpg 文件时遇到问题。

我调试了程序并发现图像二进制文件包含零。由于我将其存储在 char 数组中(由 char 指针指向),因此零被解释为字符串的结尾。我该怎么办?我可以只删除零吗?那么图像会被操纵吗?我必须创建一个新数组吗?除了零之外的所有内容都存储在其中?

最佳答案

您的字节字符串不是以 null 结尾的(它不是 C 样式字符串)。

您应该将 strcat 替换为 memcpy,如下所示:

memcpy(response_pointer, body_start_pointer, fsize);

并且您应该将 strlen() 替换为实际长度:

write(new_socket, response, fsize);

此外,以下行是无用的,应该删除(因为不需要空终止):

*body_pointer = '\0';

关于C:读取图像并将其存储在包含零的字符数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53285285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com