【问题标题】:Unwanted output in a file handling program(concatenate files)文件处理程序中不需要的输出(连接文件)
【发布时间】:2014-09-04 23:42:44
【问题描述】:

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

#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);
}

【问题讨论】:

  • 这段代码中的一连串错误很长。 argv[]char* 的数组,而不是 int*argc0 甚至作为标识符都不是有效的,c=getc(a) != EOF 不会做你可能想要的事情,而且无论如何都没关系,因为 c 也不是有效的标识符。你使用的是什么工具链,实际上接受这个?
  • 对不起,我在这里打错了,但我主程序没有这样做
  • @WhozCraig 我只是在终端中输入普通单词(字符串),希望它能将它们连接起来。

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


【解决方案1】:

看来您从 K&R 复制程序时出现了一些错误。 ..他们正在导致您的问题。

具体来说,这段代码:

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

应该是:

int c;    

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

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

【讨论】:

    猜你喜欢
    • 2014-04-02
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    相关资源
    最近更新 更多