命令行参数有"*"号

painAndhappy 2005-06-15 10:00:38
程序 : test.c
代码如下 :
-------------------------------------------------------------
#include <stdio.h>

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

while (argc > 0) {
printf("argv[%d] : %s\n", argc - 1, argv[argc - 1]);
argc--;
}

system("PAUSE");
return 0;
}
-------------------------------------------------------------

存在问题 :
运行程序,输入 ======> test a b * c
此时,上面运行参数中的"*", 其输出的是该程序所在目录的所有文件名.

希望 :
运行 "test a b * c" ,可以如下输出
--------------------
argv[3] : c
argv[3] : *
argv[2] : b
argv[1] : a
argv[0] : test
--------------------
...全文
105 点赞 收藏 9
写回复
9 条回复
DiabloWalkOnTheEarth 2005年06月16日
命令行写成 test a b \* c 就可以了哦
回复 点赞
holymoon858 2005年06月16日
nicknide(封月翔天)(表白被拒,郁闷) 正解!
回复 点赞
chinaren2k 2005年06月16日
指针数组呀 其中0里面存放的社会 文件名
后面都存放的是带的参数
回复 点赞
邱洋inCloud 2005年06月16日
你的问题跟 windows 和 unix,linux 的 shall 方式有关系
(例如: pro.exe a test * b)

在 unix/linx 下面,如果你用 * 系统会自动将当前目录下所有的文件作为参数赋给可执行程序
解决方法:你可以在输入参数的时候加入转意符 \ 形成 pro.exe a test \* b 即可

在 window 下面,如果你用 * 系统也会跟 unix/linux 下面的方法一致,你甚至可以输入
pro.exe ../* 这样系统会将上一级的目录作为参数赋给可执行程序
解决方法:你可以在输入参数的时候加入双引号形成 pro.exe a test "*" b 即可
回复 点赞
painAndhappy 2005年06月15日
写错了,希望输出是
--------------------
argv[4] : c
argv[3] : *
argv[2] : b
argv[1] : a
argv[0] : test
--------------------
回复 点赞
agaric 2005年06月15日
拜托 那要自己实现的。。。
回复 点赞
nicknide 2005年06月15日
楼上,楼主估计是在UNIX下做的,UNIX下的shell自动将*给展开,所以程序收不到*
不过可以使用''来夹住这个*就不会被展开了。
回复 点赞
fflush 2005年06月15日
我在vc7+winxp下测试你的程序,结果如你期望的一样,没有出现你说的情况
E:\project\temp\Release>test a b * c
argv[4] : c
argv[3] : *
argv[2] : b
argv[1] : a
argv[0] : test
回复 点赞
jixingzhong 2005年06月15日
MARK!!

没有发现什么错!!

怎么会和DOS一样输出呢??*==所有文件?

不应该啊!!




学习!!
回复 点赞
发动态
发帖子
C语言
创建于2007-09-28

3.2w+

社区成员

24.0w+

社区内容

C语言相关问题讨论
社区公告
暂无公告