2017-05-30 12 views
2

私はこの世界を送りたい、何かが根本的に間違っていると思います:配列文字列を関数ポインタに渡すか?

void(*flashReadDelegate)(char*[])=0; 

し、それを呼び出す:関数ポインタDEF関数ポインタ、引数として

static char content[MAX_NUM_WORDS][MAX_WORD_LEN]; 

//save some data in (which prints ok) 
strcpy(content[record_desc.record_id],toSave); 

// ***Send the delegate out 
(*flashReadDelegate)(content); // ** here there is a compiler warnning about the argument 

contentを送信したい場合、ポインタ引数はどのように表示されますか?

答えて

5

void(*flashReadDelegate)(char*[])=0;が間違っています。あなたの関数ポインタは、あなたがflashReadDelegateが指している機能のプロトタイプを言及していないこの

void (*flashReadDelegate)(char (*)[MAX_WORD_LEN]); 

ようにする必要があります。私はそれのプロトタイプは、関数呼び出し(*flashReadDelegate)(content);で、今

void func(char (*)[MAX_WORD_LEN]); 

だろうと仮定しています、引数配列contentMAX_WORD_LENchar S((*)[MAX_WORD_LEN])の配列へのポインタに変換されます。

+0

おかげでたくさん!だから私の議論は間違っているのですか?それは文字列へのポインタではありませんか? – Curnelious

+2

@Curnelious;関数のパラメータ 'char * []'は 'char **'と等価です。 – haccks

+0

まあ 'char * []'は、 'char(*)[MAX_WORD_LEN]'が文字の配列へのポインタになり、各配列要素がMAX_WORD_LEN文字幅である文字配列の最初の要素へのポインタになります – Zakir

1

contentの宣言は、の文字列へのポインタではありません。 MAX_NUM_WORDS個の文字列の配列がMAX_WORD_LEN文字のです。

あなたはcontentとして宣言する必要があるだろう文字列の配列たい場合:静的のchar *内容[MAX_NUM_WORDS]; `

関連する問題