gpt4 book ai didi

在 c - fwrite 中复制并写入每个图像一个 html 文件

转载 作者:行者123 更新时间:2023-11-30 18:52:35 24 4
gpt4 key购买 nike

我仍在尝试找出如何让程序为每个图像写入一个 html 文件,我的第一个想法是在下面的评论中对 n 进行迭代,但我收到编译器错误,因为 fwrite 仅接受 2 个参数,还有其他可能性吗?提前致谢。

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

int main() {
int i;
char html[] = {"<html><head><style>img{height:40px;width:40px;}</style></head><body><div align='center'>"};
char htmlend[] = {"</div></body></html>"};
char image[] = {"<img src='\\C:\\Users\\Sparkm4n\\Desktop\\material\\\0"};
char imageend[] = {"'><br>\0"};
size_t bytes;
FILE *read;
FILE *write;
read = fopen("C:\\Users\\Sparkm4n\\Desktop\\material\\dateien.txt", "r");
if (read == NULL) {
printf("read error!\n");
} else {
printf("file opened\n");
}
char line[200] = {};
int n = 0;
write = fopen("C:\\Users\\Sparkm4n\\Desktop\\material\\pics.html", "w");
printf("pics.html opened %p\n", write);
fwrite(html, 1, strlen(html), write);
while (fgets(line, 200, read)) {
printf("%s\n", line);
++n;
//write=fopen("C:\\Users\\Sparkm4n\\Desktop\\material\\pics",[n],".html", "w"); this one doesnt work
fwrite(image, 1, strlen(image), write);
fwrite(line, 1, strlen(line), write);
fwrite(imageend, 1, 1 + strlen(imageend), write);
}
fwrite(htmlend, 1, strlen(htmlend), write);
printf("%d found\n", n);
fclose(read);
fclose(write);
}

最佳答案

您的代码存在几个问题,但总体逻辑是好的。

我看到您已经注释了旨在创建与 line 指向的当前图像关联的 HTML 文件的行。事实上,您需要 snprintf 来执行您想要执行的格式化操作。此函数的作用类似于 printf,但写入缓冲区而不是写入标准输出。

因此,我重命名了一些变量,但对于其他更改,我添加了相应的注释。不过,我只减少了对命令式更改的更改,以尽可能保持代码不变。阅读这些评论以了解为什么您的代码不起作用。

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

int main() {
// <UPDATE label="standard string initialization syntax">
char html_start[] = "<html_start><head><style>img{height:40px;width:40px;}</style></head><body><div align='center'>";
char html_end[] = "</div></body></html_start>";
char image_start[] = "<img src='C:\\Users\\Sparkm4n\\Desktop\\material\\";
char image_end[] = "'><br>";
// </UPDATE>

FILE *f_dateien;
FILE *f_pics_html;
f_dateien = fopen("dateien.txt", "r");
if (f_dateien == NULL) {
printf("f_dateien error!\n");
}
else {
printf("file opened\n");
}
char line[200] = "";
int n = 0;
f_pics_html=fopen("C:\\Users\\Sparkm4n\\Desktop\\material\\pics.html", "w");
printf("pics.html opened at %p\n", f_pics_html);
fwrite(html_start, 1, strlen(html_start), f_pics_html);
while (fgets(line, 200, f_dateien)) {
// <UPDATE>
// fgets also reads the \n of a line
// Assuming that each line never exceeds 200 characters,
// We can do this to remove that useless \n if it is present:
int len = strlen(line);
if (len > 0 && line[len - 1] == '\n') {
line[strlen(line) - 1] = '\0';
len--;
}
// Ignore empty lines
if (len == 0) {
continue;
}
// </UPDATE>

printf("%s\n", line);

++n;

// <UPDATE>
// _snprintf provides a correct way to format a string
// It's the Microsoft's attempt to mimic the standard snprintf function
char f_one_pic_html_name[260];
_snprintf(f_one_pic_html_name, 260, "C:\\Users\\Sparkm4n\\Desktop\\material\\pics\\%d.html", n);

FILE *f_one_pic_html=fopen(f_one_pic_html_name, "w");
// </UPDATE>

// <UPDATE label="start the html like we've done with pics.html">
fwrite(html_start, 1, strlen(html_start), f_one_pic_html);
// </UPDATE>

fwrite(image_start, 1, strlen(image_start), f_one_pic_html);
fwrite(line,1, strlen(line), f_one_pic_html);
// <UPDATE label="write strlen(image_end) chars, not strlen + 1">
fwrite(image_end, 1, strlen(image_end), f_one_pic_html);
// </UPDATE>

// <UPDATE label="write the image in pics.html too">
fwrite(image_start, 1, strlen(image_start), f_pics_html);
fwrite(line,1, strlen(line), f_pics_html);
fwrite(image_end, 1, strlen(image_end), f_pics_html);
// </UPDATE>

// <UPDATE label="end html">
fwrite(html_end, 1, strlen(html_end), f_one_pic_html);
fclose(f_one_pic_html);
// </UPDATE>
}

fwrite(html_end, 1, strlen(html_end), f_pics_html);
fclose(f_pics_html);

printf("%d found\n", n);
fclose(f_dateien);

return 0;
}

完成后,您现在可以增强代码,例如:

  • 使用好的变量名
  • 良好的代码格式
  • 将 strlen 的返回值存储在变量中,而不是多次调用
  • 更好的文件解析
  • 使用 %p 时将指针强制转换为 void *
  • 等等

关于在 c - fwrite 中复制并写入每个图像一个 html 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34754133/

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