gpt4 book ai didi

c - 如何将字符串作为函数参数传递

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

我正在尝试创建一个函数,该函数获取类似于命令行参数的参数。为此,我想将一个字符串传递给我的函数,但我遇到了段错误(核心转储)。

这是我在 hello 函数中的尝试,如下所示,

int hello(int argc, char **argv)                                             
{
int i=0;
printf("%d\n", argc);
for(i=0; i<argc; i++)
printf("%s\n", argv[i]);
return 0;
}

我从 main 调用,

int main ()                                                 
{
hello(3, "i am fine");
return 0;
}

我想要得到

i
am
fine

但是却出现段错误。

最佳答案

hello(5,"i am fine");在 main.c 中,以下三件事之一应该为真:

  • 您在编译时没有启用(许多)警告消息。如果是这样,请在编译器中打开警告消息。
  • 编译器警告您 hello没有声明(也许它假设了一个声明/类型)。如果是这样,请插入 hello 的声明在 main.c 中(或者将其放入名为 hello.h 的 header 中并在 main.c 中插入 #include <hello.h>)。
  • main.c 包含您在问题中未向我们展示的代码,或者 hello 的声明或头文件的包含,以及 hello 的声明main.c 或头文件中的定义与 hello.c 中的定义不同。如果是这样,请显示问题中的完整代码。

解决上述问题后,应该有 hello 的声明在 main.c 中(显式或包含在头文件中)与其在 hello.c 中的定义相匹配:

int hello(int argc, char *argv[]);

一旦该声明位于 main.c 中,编译器应警告您调用 hello(5,"i am fine");与声明不符。这是因为"i am fine"是一个字符数组,当以这种方式使用时,会自动转换为指向其第一个元素的指针。所以传递的参数是一个指向 char 的指针,也称为char * 。但参数是char ** .

所以你需要传递一个 char ** 。一个简单的方法是创建一个 char * 的数组。 :

char *Arguments[] = { "i am fine" };

然后你可以将数组传递给hello :

hello(1, Arguments);

char 数组一样,这个数组 char *将自动转换为指向其第一个参数的指针,因此 char **将会通过。

另请注意,我更改了 51 。第一个参数是第二个参数指向的字符串数,并且您仅传递一个字符串。

要传递五个字符串,数组中应该有五个字符串,并且要匹配 main 的参数。指定后,数组中应该有一个附加元素为空指针:

char *Arguments[] = { "i am fine", "two", "three", "four", "five", 0 };
hello(5, Arguments);

完成此操作后,您可以使用复合文字而不是命名数组。复合文字是一种在表达式中创建对象的方法,它使用括号中的类型名称,后跟大括号中的对象值:

hello(5, (char *[]) { "i am fine", "two", "three", "four", "five", 0 });

关于c - 如何将字符串作为函数参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57272143/

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