1

我想处理一个字符串数组,所以它是一个字符数组的数组

我已经定义了这样的字符串

char que1[4][LEN_STRING]={{'\0'}};

我想将它们传递给函数

void print_results(char *pqueries[],document p_docs[]);

使用一个简单的

  print_results(que1,indoc);

导致“预期的 'char **' 但参数的类型为 'char (*)[30]'”

我什至不确定我实际上是否定义了函数签名正确,

帮助将不胜感激

谢谢

4

3 回答 3

1

数组数组与指针数组不同。请参阅 C 常见问题解答更多详细信息:http ://c-faq.com/aryptr/pass2dary.html 。

一种解决方案是修改您的函数以采用固定宽度的字符串:

void print_results(char (*pqueries)[LEN_STRING],document p_docs[]);
于 2012-06-03T19:27:17.787 回答
0

因为它是一个 chars 数组的数组,你可以将它衰减为一个指针数组(每个指针代表 char 数组的位置),因此使用这个: char **que1;

 for(int z = 0;z<4;z++)
        {
           *que1[z] = malloc(LEN_STRING*(sizeof(char));
           memset(que1[z], '\0', (size_t)LEN_STRING);

         }

你现在可以这样称呼:

print_results(que1,indoc);

print_results(que1,indoc) 的定义将是:

void print_results(char **pqueries,document p_docs[]);
{

//access *[pqueries] in a for loop for each stored character


}

rgds,软软的

于 2012-06-03T20:15:03.060 回答
0

正确的声明/定义将是

void print_results(char pqueries[][LEN_STRING],document p_docs[]);
void print_results(char pqueries[][LEN_STRING],document p_docs[])
{
  ...
  sprintf(pqueries[0],"%.*s",LEN_STRING-1,"blah0");
  ...
  sprintf(pqueries[3],"%.*s",LEN_STRING-1,"blah3");
}
于 2012-06-03T20:46:50.170 回答