gpt4 book ai didi

c - 为什么我不能使用文本编辑器或使用 C 程序创建图像文件(jpg)副本?

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

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main(int argc , char **argv)
{
FILE *fp1 = fopen(argv[0] , "r");
FILE *fp2;

fseek(fp1 , 0L , SEEK_END);

long int file_size = ftell(fp1);

printf("file size is : %ld\n", file_size);

rewind(fp1);

int cnt = 0;

fp2 = fopen("newImage.jpg", "w");

printf("file pointer is at %ld ", ftell(fp1));

while(cnt < file_size) {
fputc( fgetc(fp1), fp2 );
cnt++;
}

fclose(fp1);
fclose(fp2);

return EXIT_SUCCESS;
}

最佳答案

正如您从评论中发现的那样,从技术上讲,argv[0] 才是让您着迷的原因。我想提供一些建议,以帮助您省去向 SO 发帖的麻烦。

对于发布到公共(public)论坛的任何内容,建议“正确”设置代码格式,以帮助任何愿意花时间回答您的人。他们越了解你在做什么,你越认真对待你的问题,你就会得到更好的答案。

对于像这样的简单程序,概括输入很有用。当您打印文件大小时,也打印名称。您会立即发现您复制了错误的文件。

对于任何程序,尤其是 C 语言,尤其是涉及 I/O 的程序,检查系统调用的返回码是必不可少的assert(3) 和 err(3) 是你的 friend 。值得注意的是,如果您不从 fgetc 检查 EOF,则您将向输出文件的每个字节写入 -1,并且不会向用户发送任何消息。 (是的,您完全有权利期望,如果您可以打开并查找文件,您就可以从中读取内容。OTOH,像从 fp2 读取这样的小错误可能会被忽视。 )

尽管看起来很奇怪,但仔细的错误检查鼓励编写最少的代码。就您而言,您实际上并不关心文件有多大。您只想读取所有输入,直到 EOF。如果这样做,您自然会采用惯用语 while( (ch = fgetc(fp1)) != EOF ) 并节省一次调用来找出文件有多大。

了解getopt(3) 并使用它。这样就可以避免您在 argv[0] 上遇到麻烦。

如果您遵循该建议,您可能会发现问题本身就得到了答案,就像我一样。 C 是一种简单的语言,并且 C 标准库有很好的文档记录。如果您对输入非常小心,对格式非常挑剔,并且不断地检查错误,那么剩下的唯一错误将是您的逻辑。这就是你想要的。 :-)

关于c - 为什么我不能使用文本编辑器或使用 C 程序创建图像文件(jpg)副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42751843/

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