【发布时间】:2015-08-23 18:08:23
【问题描述】:
cat 程序的实现在 Ubuntu 终端上以二进制格式打印。我正在使用stdout 宏(FILE* 类型的对象)。
#include <stdio.h>
main(int argc, char** argv)
{
FILE *fp;
void add(FILE*, FILE*);
if (argc==1)
add(stdin,stdout);
else
while(--argc>0)
{
if ((fp=fopen(*++argv,"r"))==NULL)
{
printf("cat:can't open %s\n",*argv);
return 1;
}
else
{
add(fp,stdout); // printing all the file content on the screen.
fclose(fp);
}
return(0);
}
}
void add(FILE*p,FILE*q)
{
int c;
while((c=fgetc(p))!=EOF)
{
fputc(c,q);
}
}
现在,如何以文本格式而不是二进制格式打印?
【问题讨论】:
-
“二进制格式”和“文本格式”是什么意思?
-
我不明白你的问题。
-
while(--argv>0)应该是while(--argc>0)。为什么不使用简单的循环for (int i = 1; i < argc; i++) process(argv[i])? -
while(--argv>0)没有任何意义。argv是指向指针数组的指针,即内存中的地址,为什么要与0进行比较? @MOehm 是对的,他们建议的代码更容易阅读和理解。不,您没有通过以这种方式编写代码来优化任何东西。时间复杂度是一样的,它是由你在函数add()中进行的大数据传输给出的。 -
@user4950013 为什么循环几个程序参数时时间复杂度相关?