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所以你需要.操作符来获取它的成员。

编辑

还有一件事,我刚刚注意到你的初始化器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 回答
0

由于p_string是指针,因此无需再次将其转换为指针。使用以下语句

j = strlen((table[i]->p_string));
于 2013-07-17T12:29:01.870 回答