使用“*”执行时argc值不正确

时间:2014-09-04 10:49:59

标签: c

#include<stdio.h>
int main(int argc,char* argv[]){
        printf("\n argc : %d \n",argc);
        return 0;
}

输出:

[root@aman]# ./a.out *

argc : 8

我已经传递了两个参数,因此argc值必须为2,但它显示为8。 我想将*存储在数组中并比较输入的'*'字符串。

我正在编写一个工具来删除列表中的所有条目。因此我需要从“./a.out *”验证*是否输入。 如果输入我需要做与之对应的动作。有没有办法用作./a.out *并取用户输入的*。

3 个答案:

答案 0 :(得分:6)

您的shell正在将*扩展到当前文件夹中的文件列表。尝试用双引号或单引号括起来引用*

你可以通过迭代argv并打印所有参数来发现自己。

答案 1 :(得分:2)

在类似UNIX的操作系统上,系统shell在执行命令之前会扩展像“*”这样的运算符。 *运算符将列出当前目录中的所有文件,并将其作为参数列表提供给您的程序。您的工作目录中很可能只有8个文件。如果你真的想在程序中提供*作为输入参数,请尝试将星号放在“*”中。

答案 2 :(得分:1)

运行二进制文件时,输入argv[]被视为该目录中存在的文件数。

shell环境中的*通常表示该目录中存在的所有文件。也许使用" "可以根据需要考虑输入* [string]。