我正在尝试将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]);
答案 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);