AT命令列表为char *数组

时间:2014-02-10 10:40:46

标签: c++ c

,,我需要向调制解调器提供AT命令,如下所示: AT ^ SRPN = 1,99991,“Download_URL”,“Image”; ^ SMSO

如何将变量download_url和变量图像插入命令字符串数组?将命令数组声明为const并使用strcpy()将两个变量插入命令列表是正确的方法吗?

函数at_send_commands()需要命令列表为const。 功能原型:at_resp_t at_send_commands(TickType ticks_to_wait, const char *commands[]);

at_resp_t at_send_download_url_and_image(const char *download_url, const char *image)
{
    static const char *commands[] = 
    {
        "AT^SRPN=1,99991,",
        download_url,
        ",",
        image,
        ";^SMSO\r",
        NULL
    };

    at_resp_t err = at_send_commands(AT_TIMEOUT, commands);
    if (err)
        return err;
}

2 个答案:

答案 0 :(得分:2)

试试这个:

at_resp_t at_send_download_url_and_image(const char *download_url, const char *image)
{
    std::string str("AT^SRPN=1,99991,");
    str += download_url;
    str += ",";
    str += image;
    str += ";^SMSO\r";

    const char* command = str.c_str();
    const char* commands[] = 
    {
        command,
        NULL
    };

    at_resp_t err = at_send_commands(AT_TIMEOUT, commands);

    if (err)
        return err;
}

答案 1 :(得分:1)

在C中,最简单的方法是IMO

void send_command(const char *download_url, const char *image) {
    char buf[1000];
    sprintf(buf, "AT^SRPN=1,99991,\"%s\",\"%s\";^SMSO",
            download_url, image);
    ...
}
<{>>在buf中,您将最终获得发送到调制解调器的最终命令。

如果此代码可以在恶意环境中使用,那么您还应注意在将大字符串作为url / image传递时不会发生溢出(例如,首先在strlen添加一个检查或使用{{1}而不是)。