无法将argv传递给函数

时间:2012-01-09 15:42:00

标签: c

这是我的计划。

#include <stdio.h>

void help(const char *argv);

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

    const char *p;
    int x;

    for(x = 0; x < argc; x++) {
        p = argv[x];
        if(*p == '-') {
            p++;
        }
        switch(*p) {    
            case 'h':
                help(*argv);
                return 0;
            break;
        }
    }
    return 0;
}

void help(const char *argv) {
    fprintf(stderr, "Usage %s: [option]\n", argv[0]);
}

问题是在编译过程中我得到了

  

警告:格式'%s'需要类型'char *',但参数3有类型   “INT”

如何在帮助功能中打印程序名称?

4 个答案:

答案 0 :(得分:11)

那应该是

help(argv); 

void help(const char **argv) {
    fprintf(stderr, "Usage %s: [option]\n", argv[0]);
}

使用char**,因为您传递的是字符串数组(也就是指向char的指针)。

答案 1 :(得分:2)

没有必要取消引用它。当您需要[0]时,*argvchar相同,即char*

void help(const char *argv) {
    fprintf(stderr, "Usage %s: [option]\n", argv);
}

或者,您可能希望这样做:

help(argv); // don't dereference

//...

void help(const char **argv) {
    fprintf(stderr, "Usage %s: [option]\n", argv[0]);
}

答案 2 :(得分:1)

首先改变

void help(const char *argv);

void help(const char *argv[]);
//or
void help(const char **argv);

下次更改

void help(const char *argv) {
    fprintf(stderr, "Usage %s: [option]\n", argv[0]);
}

要 v

oid help(const char **argv) { // or with []...
    fprintf(stderr, "Usage %s: [option]\n", argv[0]);
}

并称之为:

help(argv);

答案 3 :(得分:1)

每当您在C中传递变量时,请确保不要更改变量的类型,但有一个例外,即您可以将数组表示转换为指针表示。所以

char *argv[]

应该收到

char **argv

然后传递只是

myfunc(argv);