Chinaunix首页 | 论坛 | 博客
  • 博客访问: 59744
  • 博文数量: 20
  • 博客积分: 1031
  • 博客等级: 少尉
  • 技术积分: 230
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-11 14:22
文章分类

全部博文(20)

文章存档

2011年(2)

2010年(4)

2009年(14)

我的朋友

分类:

2010-09-27 17:48:33

./exe *
想在./exe 的参数为 * 的时候对 当前文件夹所有文件 做指定的事情;

之前以为在“./exe *”里,argv[1][0]的值应该为ascii字符 * 的值,于是有了最初的程序:
int main (int argc, char **argv)
{
    if (argc < 2) return -1;

    printf ("1 ---------- %c\n", argv[1][0]);

    return 0;
}

但是这个程序在运行时,总是打印当前文件夹的第一个文件名的第一个字母,而不是预期打印 * 这个字符,百思不得其解啊...

还是问一位朋友,一开始他也不清楚为什么,后来他找出问题所在了,实际上因为这个 * 号是一个很特殊的字符,它是linux所用shell的元字符,有这样一段话:
* [ ] ?
Shell metacharacters for filename expansion

也就是说上面几个字符是用来作为文件名扩展的元字符,因此没办法在shell里运行“./exe *”的时候通过argv[1][0] 来打印出 * 这个字符。

至此,应该说这个问题就了然了,但是,我却还在执著于怎样通过“./exe *”来对所有文件做相应的事情,也就是如何判断当“./exe”的参数是“*”的时候,做相应的事情,比如下面的程序:
int main (int argc, char **argv)
{
    if (argc < 2) return -1;

    if (argv[1][0] == '*') dosomething();

    return 0;
}

这自然和前面一样不能实现目的,没办法,去chinaunix发了一个帖子,也没得到结果,最后,不记得怎么想的,把argc打印了出来,突然就有种醍醐灌顶的感觉,程序如下:
int main (int argc, char **argv)
{
    if (argc < 2) return -1;

    printf ("1 ---------- %c\n", argv[1][0]);

    if (NULL != argv[1])
    {
        printf ("2 ---------- %d, %c\n", argc, argv[1][0]);
    }

    return 0;
}


于是就这样把这个问题解决了,有偶然性,也有必然性;  作个笔记,作备忘用 ^_^

阅读(490) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~