我想处理一个字符串数组,所以它是一个字符数组的数组
我已经定义了那样的字符串
char que1[4][LEN_STRING]={{'\0'}};
我希望将它们传递给函数
void print_results(char *pqueries[],document p_docs[]);
使用简单的
print_results(que1,indoc);
产生“预期'char **'但参数类型为'char(*)[30]'”
我甚至不确定我是否实际定义了函数签名,
帮助将不胜感激
感谢
答案 0 :(得分:1)
数组数组与指针数组不同。请参阅C FAQ更多详细信息:http://c-faq.com/aryptr/pass2dary.html。
一种解决方案是修改函数以获取固定宽度的字符串:
void print_results(char (*pqueries)[LEN_STRING],document p_docs[]);
答案 1 :(得分:0)
因为它是一个字符数组的数组,你可以将其衰减 指针数组(每个指针代表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, 软质皮
答案 2 :(得分: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");
}