将字符串数组的地址传递给函数

时间:2015-10-08 23:15:03

标签: c string pointers

我正在尝试将strings_line_tokens的地址传递给split_string。我想我需要"&"对于地址,那么这些方法之一将起作用。

static void split_string(const char *buffer, size_t buflen, char ***strings_line_tokens)
static void split_string(const char *buffer, size_t buflen, char    **strings_line_tokens)
static void split_string(const char *buffer, size_t buflen, char **strings_line_tokens[])
static void split_string(const char *buffer, size_t buflen, char ***strings_line_tokens[])

这是我的声明,我尝试将地址传递给函数。

char *strings_line_tokens[503] = {0};
split_string(line, strlen(line)+1, &strings_line_tokens);

我不断得到这个错误的一些变化。

  

警告:从不兼容的指针类型传递'split_string'的参数3   main.c:73:注意:预期'char ***'但参数类型为'char *(*)[503]'

我将变量正确传递给我的函数后的目标是执行此操作。之后我希望能够在main中使用这些值。

strings_line_tokens[*big_boy_counter] = malloc(strlen(ptr[i])+1);
strcpy(strings_line_tokens[*big_boy_counter], ptr[i]);

2 个答案:

答案 0 :(得分:1)

当你有

char *strings_line_tokens[503] = {0};

&strings_line_tokens的类型为char* (*)[503] 在函数调用中使用string_line_tokens时,它会拒绝键入char**

如果要使用第一个表单,则必须将该函数声明为:

static void split_string(const char *buffer,
                         size_t buflen,
                         char* (*strings_line_tokens)[503]);
split_string(line, strlen(line)+1, &strings_line_tokens);
                              //  ^^^ Using the & operator.

如果要使用第二种形式,则必须将该函数声明为:

static void split_string(const char *buffer,
                         size_t buflen,
                         char** strings_line_tokens);

split_string(line, strlen(line)+1, strings_line_tokens);
                               //  ^ Not using the & operator.

选择。

答案 1 :(得分:-1)

这两个都有效。我需要看到你的功能,以了解更多关于使用哪些以及哪些更好:

split_string(line, strlen(line)+1, (char ***)&strings_line_tokens);


split_string(line, strlen(line)+1, (char **)strings_line_tokens);
相关问题