【问题标题】:C syntax for String manipulation advice?字符串操作建议的 C 语法?
【发布时间】:2018-03-12 09:39:08
【问题描述】:

我有一个关于 C 语法的非常简单的问题。

我正在尝试将一些静态字符串与动态字符串合并。

例如,我得到了一个具有以下原型的 C 函数:

uint8_t AT_feedback_checker(const char my_str[], const char ATcmd[],
                            uint32_t time_out_ms, uint8_t mode);

我将我的函数称为

if (AT_feedback_checker(PSTR("OK"), PSTR("AT+HTTPPARA=\"URL\",\"https://djblob.blob.net/mycontainer/myFirstDevicea.txt\" "),2000,0) == AT_REPLY_STATUS_FOUND_AT_REPLY)

我想动态更改字符串的文件名部分。

例如a.txtb.txt(而不是myFirstDevicea.txt)。文件名可以更改。

如何设置函数或语法,使字符串的起始部分是特定文本,其余部分可以是我选择的任何内容,例如文件名?

谁能给我举个例子?

【问题讨论】:

  • 我想你一直很困惑。您可以将变量字符串传递给采用 const char[] 的函数。您不能将常量字符串传递给带有变量 char [] 的字符串。

标签: c string syntax


【解决方案1】:

经典的 C 习惯用法是使用临时字符串和工具,例如 snprintf:

char cmd[128];  // choose a "large enough" size
snprintf(cmd, sizeof cmd,
    PSTR("AT+HTTPPARA=\"URL\",\"https://djblob.blob.net/mycontainer/%s\" "),
    file_name);
if (AT_feedback_checker(PSTR("OK"), cmd, 2000, 0)
    == AT_REPLY_STATUS_FOUND_AT_REPLY)
  ...

snprintf 将避免在文件名太大的情况下超出临时缓冲区。在生产代码中,您还将检查snprintf 的返回值并在这种情况下报告错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    相关资源
    最近更新 更多