文件处理程序中的不需要的输出(连接文件)

时间:2014-07-14 22:23:17

标签: c file-io command-line-arguments

我在K& R C编程书中读到了这段代码。我得到这些奇怪的盒子代替单词。为什么这样?另外请解释这个程序的if语句为什么他在fileopen期间将argv作为参数传递。我用“path”而不是argv打开文件,但是这个命令行向量参数让我更难理解。什么是* argv []?到目前为止,我认为我还没有向argv [index]提供任何字符串。它对我来说有点困惑。提前谢谢。

What are these weird symbols i wrote words here

#include <stdio.h>
/* cat: concatenate files, version 1 */
main(int argc, char *argv[])
{
FILE *fp;
void filecopy(FILE *, FILE*);
if(argc==1) /*No optional argument so printing stdin and stdout*/
       filecopy(stdin, stdout);
while(--argc0)
       if((fp= fopen(*++argv, "r")) == NULL){
             printf("Cat: can't open %s\n", *argv);
             return 1;
       }else{
             filecopy(fp, stdout);
             fclose(fp);
       }
return 0;
}

/*filecopy program to copy file a to b*/
void filecopy(FILE *a, FILE *b){
while(c=getc(a) != EOF)
      putc(c,b);
}

1 个答案:

答案 0 :(得分:1)

您似乎在从K&amp; R复制程序时遇到了一些错误。 ..他们正在引发你的问题。

具体来说,这段代码:

while(c=getc(a) != EOF)
  putc(c,b);

应该是:

int c;    

while((c=getc(a)) != EOF)
    putc(c,b);

问题是赋值运算符(=)的评估顺序较低 比不等于运算符(!=)。