目前我正在实现一个简单的二叉搜索树以及添加,删除,搜索或任何我想要的命令,我想在命令行中输入它然后执行该功能。
所以下面的代码会将整数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();
}
答案 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
时使用。