【问题标题】:Losing encoding when converting from char to string从字符转换为字符串时丢失编码
【发布时间】:2016-03-27 07:47:22
【问题描述】:

我在 Ubuntu 中将 Codeblocks 用于 c++ 项目。我有以下用于创建时间戳的函数:

char *myclass::getCurrentTime() {

  time_t rawtime;
  struct tm * timeinfo;
  char buffer[30];

  time(&rawtime);
  timeinfo = localtime(&rawtime);

  strftime(buffer, 30, "%d-%m-%YT%H:%M:%S.000+02:00", timeinfo);
  return buffer;
}

当我通过以下方式将返回的字符转换为字符串时:

char *curr_time = getCurrentTime();
string time_str = string(curr_time);

它会丢失编码,如果我尝试将字符串写入文件或打印它,我会得到未定义的字符。如果我使用 char 编码没有问题。当我在 Win7 中使用 Visual Studio 时,一切正常。

【问题讨论】:

    标签: c++ string time encoding char


    【解决方案1】:

    您正在从函数返回一个局部变量。您认为您正在返回一个数组,但您的代码正在做的是返回一个指针。数组可以转换为指针,这就是这里发生的事情。虽然它不是非法的,但它会导致未定义的行为,因为当函数返回时数组被破坏并且你得到你看到的垃圾。

    如果您希望正确分配缓冲区,则可以这样声明:

    char* buffer=new char[30];
    

    【讨论】:

      【解决方案2】:

      您正在返回一个悬空指针。在get CurrentTime 返回后,数组buffer 被销毁,但您仍然使用指向它的指针。这是未定义的行为 - 它有时似乎有效,但没有任何保证。

      如果您在 getCurrentTime 中转换为 string 并返回,那么一切都会好起来的 - string 的部分意义在于为您处理此类问题。

      【讨论】:

        猜你喜欢
        • 2011-01-24
        • 1970-01-01
        • 1970-01-01
        • 2011-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多