【发布时间】: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