这是我的计划。
#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”
如何在帮助功能中打印程序名称?
答案 0 :(得分:11)
那应该是
help(argv);
和
void help(const char **argv) {
fprintf(stderr, "Usage %s: [option]\n", argv[0]);
}
使用char**
,因为您传递的是字符串数组(也就是指向char的指针)。
答案 1 :(得分:2)
没有必要取消引用它。当您需要[0]
时,*argv
与char
相同,即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);