【问题标题】:c++ modify char inside functionc ++修改char内部函数
【发布时间】:2019-10-25 12:33:51
【问题描述】:

我创建了一个函数来使用 c++ 从 esp32 中检索日期。但是它会导致错误。

我看到了几十个网站,但没有一个解决方案对我有用。如果您提供代码,则可以将其更改为更好的做法。

想法是。 创建一个函数以在 char 中返回 DateTime。

void getCurrentDateTime(char **datetime){
  time_t tt = time(NULL);
  data = *gmtime(&tt);
  strftime(datetime, 64, "%m/%d/%Y %H:%M:%S", &data);
}

我这样称呼那个函数。

char *datetime; 
getCurrentDateTime(&datetime);  // my function

代码编译但esp32设备崩溃...

我刚刚开始使用 c++ 代码...所以如果您解释并提供函数代码以及如何调用它,我将不胜感激。

【问题讨论】:

    标签: c++ pointers char


    【解决方案1】:

    您应该首先初始化datetime,并将其作为char* 传递给函数。

    #include <ctime>
    
    void getCurrentDateTime(char* datetime){
        time_t tt = time(NULL);
        tm data = *gmtime(&tt);
        strftime(datetime, 64, "%m/%d/%Y %H:%M:%S", &data);
    }
    
    int main() {
        char datetime[64];
        getCurrentDateTime(datetime);
    }
    

    【讨论】:

    • 谢谢。那行得通。仅出于学习目的,如果我不知道 char 的长度...我可以在函数中使用其他长度来实例化其他 char 吗?
    • @EricTorres 对于strftime(),您必须自己选择一些长度。但是你可以使用std::put_time() 代替:stackoverflow.com/questions/10289017/…
    【解决方案2】:

    你需要初始化dateTime指针。datetime指针指向的地方没有分配内存。所以当strftime 试图填充它时,它会崩溃。 用一些预定义的内存大小初始化它

    char *datetime = new char(80); 
    getCurrentDateTime(&datetime);
    

    更新: strftime 也将 char* 作为第一个参数,但您传递的是 char**

    【讨论】:

      【解决方案3】:
      strftime(*datetime, 64, "%m/%d/%Y %H:%M:%S", &data);
      

      没有进一步的测试,我说它是因为你需要取消引用你的“引用指针”。

      您的日期时间以“指向 char[] 的指针”的形式出现,然后您尝试打印到指针而不是 char[]

      【讨论】:

        猜你喜欢
        • 2019-10-19
        • 1970-01-01
        • 2021-11-23
        • 2013-11-13
        • 2015-12-21
        • 1970-01-01
        • 2023-01-10
        • 2016-01-20
        • 1970-01-01
        相关资源
        最近更新 更多