gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:44:49 25 4
gpt4 key购买 nike

我正在尝试创建一个极其简单的程序,其中包含两个 .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;
}

而 foo.c 是:

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

void foo(char *input[]) {

printf("Welcome, %s\n", input);
}

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

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

gcc -o main main.c foo.c foo.h

我收到错误

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

我的代码哪里出了问题?我已经尝试玩它有一段时间了。请注意,当我运行 ./main "Test"时,它会打印“Welcome, Test”,即正确的预期输出,但警告错误困扰着我。另外,我怎样才能制作一个简单的makefile来编译这3个文件,而不是每次都输入gcc?我尝试执行以下操作:

CFLAGS=-Wall -g


all: main foo

clean:
rm -f main foo

但是输入“make”不会编译任何东西。

谢谢。

最佳答案

我不知道你从哪里拿到这个

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

来自,但肯定是错误的。

应该是

void foo(char *input) {
printf("Welcome, %s\n", input);
}

argv[1] 的类型是 char *,使用 char input[] 虽然有效,但不是必需的,因为它会转换为无论如何,一个指针,即使 char input[10] 也会有类型 char *,如果您尝试使用 sizeof 运算符,这特别糟糕。

在我看来,这只是我的观点,你永远不应该让你的代码像 void foo(char input[]) 这样 Java-ish,有些人有一个论点,认为这样做是件好事它知道您正在将一个数组传递给函数,但这并不重要,因为最终它只是一个指向数组第一个元素的指针。

关于C 程序通过命令行传入参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32824306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com