#include <stdio.h>
#include <stdlib.h>
//CALLBACKS
void infoCallback(){
system("cheese");
}
void wgetCallback(char *website){
if(website == NULL)
printf("\nSITIO WEB NO INGRESADO!\n");
else{
printf("%s \n", website);
system("echo making wget success");
}
}
int main(int argc, char *argv[]){
printf("\tAUTO-BASH\n");
printf("%s \n", argv[1]);
if(argv[1] == "-w"){
wgetCallback(argv[2]);
}
else if(argv[1] == "-i"){
infoCallback();
}
else{
printf("\nsos un noob\n");
}
}
它没有做我想要的......如果我写了-w,它就会转向别的。 ... 我想做一个开关(任何类型){ 案例&#34; ??&#34;: 但我不知道为什么我不能这样做。
答案 0 :(得分:3)
strcmp
答案 1 :(得分:2)
您不能将C字符串与==进行比较。使用strcmp
。
if(strcmp(argv[1],"-w") == 0)
答案 2 :(得分:1)
退一步。在C中,什么是字符串?
string 是由第一个空字符终止并包含第一个空字符的连续字符序列。
C11§7.1.11
string 不是指针而不是地址,而是一系列字符,例如数组或字符串文字。
要比较字符串,代码需要比较这些数组的内容。使用strcmp()
。
// compares pointers - not a string compare
if(argv[1] == "-w") {
// compares content - a string compare
if (strcmp(argv[1], "-w") == 0) {
argv[1] == "-w"
比较指针,而不是它们指向的内容。
strcmp(argv[1], "-w")
取值argv[1]
,char *
和字符串文字 "-w"
的地址,也是char *
并使用这些2来开始比较char
- by - char
,直到遇到空字符的差异。
答案 3 :(得分:0)
您无法将C中的字符数组与==进行比较,而C不支持operator overloading
。您必须使用standard library function
strcmp()
或制作自己的功能。
例如,
if (!strcmp(argv[1],"-w"))
但您可以使用==
运算符比较两个字符。你可以试试这个。
#include <stdio.h>
void infoCallback()
{
printf("cheese\n");
}
void wgetCallback()
{
printf("website\n");
}
int singleCharOpt(char *opt)
{
if (*(opt+1) != '\0') {
printf("Not a Valid Single Character Option\n");
return -1;
}
if(*opt == 'w') {
wgetCallback();
} else if(*opt == 'i') {
infoCallback();
} else {
printf("Unknown Option\n");
}
return 0;
}
int main(int argc, char *argv[])
{
/* Do Something */
printf("Hello options\n");
if (argc <= 1)
return 0;
int i;
for (i=1; i<argc; i++ ) {
printf("Option: %s\n", argv[i]);
char *opt = argv[i];
int result = (*opt == '-') ? singleCharOpt(++opt) : -1;
if (result)
printf("Wrong Option\n");
}
return 0;
}