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 FAQ の詳細を参照してください: http://c-faq.com/aryptr/pass2dary.html

1 つの解決策は、固定幅の文字列を取るように関数を変更することです。

void print_results(char (*pqueries)[LEN_STRING],document p_docs[]);
于 2012-06-03T19:27:17.787 に答える
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 に答える
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 に答える