分类:
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;
}
于是就这样把这个问题解决了,有偶然性,也有必然性; 作个笔记,作备忘用 ^_^