argv[1]这个文件在哪里?

C语言 码拜 10年前 (2015-05-11) 1811次浏览 0个评论
 

   下面这个程序是我几乎复制书上的程序,我想知道

问题一:“Usage: %s filename”是什么意思?

问题二:另外,argv[0]是文件名,argv[1]也是文件名,argv[0]这个文件名可以通过编译黑窗口看到,是以exe为扩展名,但是argv[1]到哪里去看呢?
   我在cmd窗口中输入几个参数依然只能看到下面:
E:\>”Microsoft Visual Studio\MyProjects\11\Debug\11.exe ” qwev rty
Usage: Microsoft Visual Studio\MyProjects\11\Debug\11.exe  filename

应该说除了argv[0]外,我还输入了“qwev”与“rty”呢?应该说argv[1]为“qwev”才对呀?

问题三: if(argc != 2)是查看命令行是否有参数吗?为什么不用if(argc < 2)?

#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"

int main(int argc, char *argv[])
{
	char ch;
	FILE *fp;
	long count = 0;

	if(argc != 2)
	{
		printf("Usage: %s filename\n", argv[0]);
		exit(1);
	}

	fp = fopen(argv[1], "r");
	if(fp == NULL)
	{
		printf("Can""t open %s", argv[1]);
		exit(1);
	}

	ch = getc(fp);
	while(ch != EOF)
	{
		count++;
		putc(ch, stdout);
		ch = getc(fp);
	}
	fclose(fp);
	printf("File %s has %d characters\n", argv[1], count);

	return 0;
}

10分
1、是告诉用户该程序的用法,需要带一个filename的参数;
2、因为你输入了qwev和rty两个参数,导致argc!=2;
3、可以用argc<2,但是不严谨,就如你2中输入了多的参数不会报错。
10分
1.“Usage: %s filename”就是当你输入出错的时候提醒用户正确的输入方法。。
2.argv[1]的确是“qwev”。。但argc == 3了。。在前边就退出了。。
3. if(argc != 2)是判断用户是否按设想的方式输入。。就是test.exe filename这样。。
但是程序的这部分似乎没有执行呀?

ch = getc(fp);
    while(ch != EOF)
    {
        count++;
        putc(ch, stdout);
        ch = getc(fp);
    }
应该是把argv[1]输出不是吗?但是没有输出呀。
10分
VC6:
 工程、设置、Debug、U程序变量:填写命令行参数。
VS20XX:
 项目、属性、配置属性、调试、命令参数:填写命令行参数。

在这里“命令行参数”的内容你应该填写为一个存在的文件全路径,比如d:\mydir\myinput.txt

当然,如果不在IDE中调试的话,你还可以在cmd窗口中输入以下命令:
假设你的代码编译后的可执行文件为d:\mydir\myprog.exe

cd /d d:\mydir
myprog myinput.txt
不对,不对,我的两次输入导致argc==3,所以只会输出Usage: %s filename.这个我能理解。
我试着只输入一个参数qwev,会在DOS窗口中输出“Can””t open qwev”。 这个我也能理解。

我不能理解的是为什么最后一步输出没有执行。

看了zhao4zhong1的话,我再试试。
确实实现了输出。比如我在F盘建立了123.txt文本文件,在“工程、设置、Debug、U程序变量:填写命令行参数”中写入f:\123.txt,然后再编译确认能够输出了。

我还想问argv[0]这个文件名与argv[1]这个文件名有什么区别与联系呀?我的程序是保存在E盘中的,编译显示
“E:\Microsoft Visual Studio\MyProjects\11\Debug\11.exe”,而123.txt我是存在F盘中的。

10分
argv[0] 是你的执行程序名和路径
argv[1] 是你执行程序 后面填的第一个参数 以空格分隔
引用 10 楼 ikou_xu 的回复:

argv[0] 是你的执行程序名和路径
argv[1] 是你执行程序 后面填的第一个参数 以空格分隔

argv[0]不保证一定是全路径。

在我这个程序中,argv[1]好像必须输入一个文本文件名,否则执行到第一个if就会结束程序。
这个程序可以计算一个文本文档有多少个字符,我想问如果一个word文档的话,是不是要先转换成txt文件才能计算有多少字符?
引用 11 楼 zhao4zhong1 的回复:
Quote: 引用 10 楼 ikou_xu 的回复:

argv[0] 是你的执行程序名和路径
argv[1] 是你执行程序 后面填的第一个参数 以空格分隔

argv[0]不保证一定是全路径。

argv[0]对应的是程序的路径,难道也可能是相对路径还是怎样?? 希望解疑。谢谢。

你分别用下面几种方法试试:

cd /d d:\mydir
myprog myinput.txt

cd /d c:\
d:\mydir\myprog d:\mydir\myinput.txt
d:myprog d:myinput.txt
zhao4zhong1,我没有看明白上面。分别是哪几种方法呀?
还有第4行中cd /d c:\ 
dos中cd 是进入某个文件夹的意思。您这一行的意思到底是进到哪里呀?

我刚刚学了一点dos,还不是很熟悉,请进一步明说。

在dos环境下 将你的程序的地址打出来 空格 将你自己建好的txt文档的地址打出来 回车 ,结果就出来了 
putc(ch,stdout); //相当于 putchar(ch)~~

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明argv[1]这个文件在哪里?
喜欢 (2)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!