无法将argv传递给函数

3

这是我的程序。

#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 *”,但第三个参数的类型为“int”

如何在帮助函数中打印程序名称?

将参数声明为 char *argv [],而不是 char *argv - khachik
4个回答

11

那应该是

help(argv); 

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

使用 char** 是因为你正在传递一个字符串数组 (也就是指向 char 的指针)。


2
不需要解引用它。当你想要一个char*时,[0]*argv相同,后者将是一个char。请保留HTML标签。
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]);
}

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);

1
无论何时在 C 中传递变量,确保不要更改变量的类型,唯一的例外是可以将数组表示转换为指针表示。因此,当你需要传递变量时,请注意不要更改其类型。
char *argv[]

应该被接收为

char **argv

然后传递就很简单了

myfunc(argv);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接