我在K& R C编程书中读到了这段代码。我得到这些奇怪的盒子代替单词。为什么这样?另外请解释这个程序的if语句为什么他在fileopen期间将argv作为参数传递。我用“path”而不是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);
}
答案 0 :(得分:1)
您似乎在从K&amp; R复制程序时遇到了一些错误。 ..他们正在引发你的问题。
具体来说,这段代码:
while(c=getc(a) != EOF)
putc(c,b);
应该是:
int c;
while((c=getc(a)) != EOF)
putc(c,b);
问题是赋值运算符(=
)的评估顺序较低
比不等于运算符(!=
)。