标题:高手快来帮忙。。还是MAIN函数命令行问题。。。大家来帮帮忙。上次就没解决 ...
只看楼主
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
得分:10 
今天下午上实验课的时候闲着的时候就把你的这帖子的问题上机弄了弄,因为这个问题我也一直处于有点糊涂的(因为本人也是菜鸟,呵呵!),下面我就把这个问题给你讲解一下!
这些只是我个人的理解!也许讲解的可能会有错误,如果有讲的不对的地方希望高手能够指正!

这个是你写的代码,我给贴出来:
你的这段代码是没有问题,起码我没有发现错误!
程序代码:
#include <stdio.h>
#include <string.h>
void main (int argc,char *argv[])
{
    FILE *inp;
    char str[10];
    printf("%d\n",argc);
    if((inp = fopen(argv[2],"r"))==NULL) //应该是这里出问题了。。文件打不开。。。。
        printf("cant open");
    while(fgets(str,10,inp)!=NULL)
    {
        if(strstr(str,argv[1]))
        printf("%s\n",str);
    }
}

我建立的工程:proj,生成的可执行文件:proj.exe , 然后我又建立了一个txt文件,命名为:1.txt ,该文件中的内容是

然后我启动了我的命令行窗口:

下面我就要进行输入命令行参数了,但是首先我要知道我的可执行文件的路径是什么,
我的可执行文件文件也就是proj.exe的路径是:E:\编程文件夹\proj\Debug
然后我在命令行中输入:

这样我就可以进行命令行的输入了,因为我们必须要明确我们可执行文件的路径,只有这样才可以进行接下来的操作!
然后我们输入可执行文件的名字,一个我们要查找的字符串,在这里我们设定要查找的字符串为:Hello World!,最后是我们建立的文件的名字:
注意
我在这里要输入的是一个字符串,这个字符串中间是有一个空格的,如果我们直接往输入Hello World!是错误的,因为程序读入的命令行参数是按照空格作为结束的标志的!)
如果我们直接输入Hello World!的话看一下:

发现这样输入是不正确的!!因此我们在输入一个字符串特别是中间有空格的时候一定不要直接输入,我们应该按照c语言中要求的那样,给这个字符串加上双引号!这一点一定要记住!!!!!!!
因此我们加上双引号输入:

这样的输入才没有错误!!!才是正确的!!!!
同时还有一点要说明一下,我们的proj.exe可执行文件要和我们建立的文本文件1.txt要放在同一个路径中,这是因为命令行窗口中我们输入的路径是:E:\编程文件夹\proj\Debug,这样以后的每一个文件系统会默认都是在该路径中,都会去这个路径中去查找!!!

关于命令行参数就讲解这么多吧,希望我讲解的是明白的!!如果在讲解中有什么错误也希望指正出来!!呵呵!

[ 本帖最后由 我菜119 于 2010-11-12 19:23 编辑 ]

愿用余生致力编程
2010-11-12 19:21
gmac
Rank: 2
等 级:论坛游民
帖 子:174
专家分:85
注 册:2010-9-28
得分:0 
回复 21楼 我菜119
谢谢你!是我的命令行使用出了问题。。
2010-11-12 23:15
gmac
Rank: 2
等 级:论坛游民
帖 子:174
专家分:85
注 册:2010-9-28
得分:0 
回复 21楼 我菜119
我能问下你输入d:的作用是什么?
2010-11-12 23:33
ml232528
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:367
专家分:879
注 册:2007-7-23
得分:1 
程序代码:

 

//这样不管你是不是全路径都可以 默认exe所在路径为当前路径
//注意如果路径有空格 就要加""号

#include <string.h>
#include <stdio.h>

int main (int argc,char *argv[])
{

    FILE *inp = NULL;
    char str[10] = {0};
    printf("%d\n",argc);

    if(argc<3)//参数太少
    {
        printf("参数不正确\n");
        return 0;
    }

    int isfullpath(char const * const &path);
    char path[256] = {0};
    if(!isfullpath(argv[2])) //判断是否全路径  
    {
        void findpath(char const * const &str,char* const &path);
        findpath(argv[0],path); //查找当前路径      
        strcat(path,argv[2]);//当前路径加文件名           
    }
    else
    {
        strcpy(path,argv[2]);//全路径    
    }


    if((inp = fopen(path,"r"))==NULL) //应该是这里出问题了。。文件打不开。。。。      
    {
        printf("\ncan't open %s\n",path);
        return 0;
    }
    while(fgets(str,10,inp)!=NULL)
    {
        if(strstr(str,argv[1]))
        {
            printf("%s",str);
        }
    }
    getchar();
    return 0;
}
int isfullpath(char const * const &path)
{

    for(int i = 0;i!=strlen(path);++i)
    {
        if(':'== path[i])return true;
    }
    return false;
}
void findpath(char const * const &str,char* const &path)
{
    int i = strlen(str) - 1;
    for(;i != -1;--i)
    {
        if('\\' == str[i])break;
    }
    int j = 0;
    for( j= 0;j!=i+1;++j)
    {
        path[j] = str[j];
    }
    path[j] = 0;
} 









[ 本帖最后由 ml232528 于 2010-11-13 00:44 编辑 ]

-︻┻┳═一 ☆ 悲伤的代价就是让自己明白什么是最重要的和应该珍惜的
2010-11-13 00:38
韭菜
Rank: 2
等 级:论坛游民
帖 子:51
专家分:94
注 册:2010-9-26
得分:0 
跟a.c文件放在一起的
2010-11-16 13:28



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-325611-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.230653 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved