C - 使用argv命令

时间:2014-03-29 17:07:59

标签: c binary-search-tree argv

目前我正在实现一个简单的二叉搜索树以及添加,删除,搜索或任何我想要的命令,我想在命令行中输入它然后执行该功能。

所以下面的代码会将整数6插入到二叉树中,看看它是否被添加“然后删除它。然后继续遍历树后序。(这被添加以显示它不仅仅是字符串和整数需要实施 - 作为参考)

"insert" 6 
"search" 6
"delete" 6
"traverse" "post"

不幸的是,在尝试确定与arg相关时调用哪个函数时,我在指针和整数之间不断得到比较警告

int main(int c, char *argv[2]) {

typedef struct node {
    int value;
    struct node * left;
    struct node * right;
}  * node;

    /* This is irrelevant and the function is in a different file */
createNode(1);
createNode(2);
createNode(3);
createNode(4);
createNode(5);
createNode(6);
createNode(7);
createNode(8);

    /* comparison warnings when deciding WHICH method to call based on the command given */
if (argv[0] == "quit") quit();
if (argv[0] == "insert") insert(argv[1]);
if (argv[0] == "delete") delete(argv[1]); 
if (argv[0] == "search") search(argv[1]);
if (argv[0] == "empty") empty();  

}

3 个答案:

答案 0 :(得分:2)

注意参数定义:

char *argv[]

其中包含:“argv是指向char的指针数组。因此argv[0]的类型为char *,而q的类型为char 1}}。基本上,你要将一个字符与一个字符串进行比较。

您可以将字符串与strcmp进行比较,如果字符串相等则返回0:

    if(strcmp(argv[0], "quit") == 0)
        ...

此外,argv[0]通常包含您的程序名称。第一个参数存储在argv[1]

中 编辑:我发誓我在某处看到argv[0]=='q' ......编辑后,答案的第一部分是无关紧要的。

答案 1 :(得分:1)

main()的原型通常是

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

第一个参数,即argv[0],是程序的名称,argv[1]是您在程序命令行中给出的第一个参数。

要比较两个字符串,您应该使用strcmp()而不是<string.h>中的==,这是您在问题中提到的警告的原因。由于argv[0]argv[1]char的指针,'q'char(它会自动转换为int)。< / p>

因此,您应该在代码中使用以下内容:

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

    if (strcmp(argv[1], "quit") == 0) quit();

答案 2 :(得分:0)

main()通常声明为

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

argc表示用户输入了多少个命令行参数,因此argv数组中有多少个有效指针。 argv数组中的第一个指针通常是程序的名称或程序的完整路径。

在使用argc中的指针之前,您应该始终检查argv。如果代码要求用户在命令名后输入2个参数,则代码应检查argc == 3并打印usage消息,如果argc不是3,则退出。

对于问题中列出的程序,预期参数为

argv[0]   name or path of the program
argv[1]   command: "quit", "insert", etc.
argv[2]   additional argument for the command

但最后两个只能在argc == 3时使用。