C程序通过命令行传递参数

-3 c command-line

我正在尝试创建一个非常简单的程序,它包含两个.c文件 - main.c和foo.c.

目标是链接这两个文件,并将参数传递给main.c方法,然后调用foo.c文件中的方法foo().

main.c的代码是:

#include <stdio.h>
#include "foo.h"

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

    foo(argv[1]);


    return 0;
}
Run Code Online (Sandbox Code Playgroud)

和foo.c是:

#include <stdio.h>
#include "foo.h"

void foo(char *input[]) {

    printf("Welcome, %s\n", input);
}
Run Code Online (Sandbox Code Playgroud)

我还有一个头文件,foo.h,它只有一行:void foo(char*input []);

当我尝试使用构建和运行文件时

gcc -o main main.c foo.c foo.h
Run Code Online (Sandbox Code Playgroud)

我收到了错误

main.c: In function ‘main’:
main.c:6:2: warning: passing argument 1 of ‘foo’ from incompatible       pointer type [enabled by default]
foo(argv[1]);
^
In file included from main.c:2:0:
foo.h:1:6: note: expected ‘char **’ but argument is of type ‘char *’
void foo(char *input[]);
Run Code Online (Sandbox Code Playgroud)

我的代码在哪里出错了?我一直试图玩它一段时间.请注意,当我运行./main"Test"时,它会打印Welcome,Test,即正确的预期输出,但是警告错误会让我烦恼.另外,如何编写一个简单的makefile来编译这3个文件,而不是每次都输入gcc?我试着做以下事情:

CFLAGS=-Wall -g


all: main foo

clean:
    rm -f main foo
Run Code Online (Sandbox Code Playgroud)

但输入"make"不会编译任何东西.

谢谢.

Iha*_*imi 5

我不知道你把它带到了哪里

void foo(char *input[]) {
    printf("Welcome, %s\n", input);
}
Run Code Online (Sandbox Code Playgroud)

从,但它肯定是错的.

它应该是

void foo(char *input) {
    printf("Welcome, %s\n", input);
}
Run Code Online (Sandbox Code Playgroud)

argv[1]is 的类型char *和使用char input[]虽然有效,但是没有必要,因为它无论如何都转换为指针,甚至char input[10]会有类型char *,如果你试图使用sizeof运算符,这是特别糟糕的.

在我看来,这只是我的意见,你永远不应该让你的代码像Java一样void foo(char input[]),有些人有一个论证,说它是好的,知道你将数组传递给函数,但它没有因为最后它只是一个指向数组第一个元素的指针.