1
struct at_response_code
{
    uint8_t *p_string;
    uint8_t event_id;
    uint8_t message_id;
};


struct at_response_code frc_table[] =
{
    (uint8_t*)"OK", EVENT_GSM_ACK_RESPONSE,GSM_MSG_ERROR,
    (uint8_t*)"+CMS ERROR:", EVENT_GSM_ERROR_RESPONSE, GSM_MSG_ERROR,
    (uint8_t*)"+CME ERROR:", EVENT_GSM_ERROR_RESPONSE,GSM_MSG_ERROR,
    (uint8_t*)"ERROR", EVENT_GSM_ERROR_RESPONSE,GSM_MSG_ERROR,
    // array terminator !!!
    (uint8_t*) 0, 0, 0
};

static uint8_t parse_command(uint8_t* p_data, struct at_response_code *table, uint8_t* message_id)
{
    struct at_response_code* p_table;
    uint8_t i = 0;
    uint8_t j;
    p_table = &sms_table[0];
    do
    {
       // j = strlen(&(table->p_string));
        j = strlen((char*)&(table[i].p_string));
        if((memcmp_P(table[i]->p_string, p_data, j)) == 0)
        {
            *message_id = table[i]->message_id;
            return table[i]->event_id;
        }
        i++;
    }
    while(table[i]->p_string != 0);
    return 0;
}

ここで、strlenを使用して構造体で定義された文字列の長さを見つけようとすると、逆参照エラー、または不完全な型へのポインターの添字として常にエラーが発生します...誰か助けてください

4

2 に答える 2

1

これは間違っています。

table[i]-> ...

table構造体 (または構造体の配列) へのポインターです。はポインタtable[i]ではstructないため、そのメンバーを取得structするには演算子が必要です。.

編集

もう1つのことは、あなたのfrc_table初期化子が間違っていることに気付いたところです。各構造体初期化子の周りに中括弧が必要です

struct at_response_code frc_table[] =
{
    { (uint8_t*)"OK", EVENT_GSM_ACK_RESPONSE,GSM_MSG_ERROR },
    { (uint8_t*)"+CMS ERROR:", EVENT_GSM_ERROR_RESPONSE, GSM_MSG_ERROR },
    { (uint8_t*)"+CME ERROR:", EVENT_GSM_ERROR_RESPONSE,GSM_MSG_ERROR },
    { (uint8_t*)"ERROR", EVENT_GSM_ERROR_RESPONSE,GSM_MSG_ERROR },
    // array terminator !!!
    { (uint8_t*) 0, 0, 0 }
};
于 2013-07-17T12:34:44.803 に答える