You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中如何将Chrono的毫秒值存入变量并正确拼接至字符串

解决Chrono毫秒值转变量及字符串拼接问题

嘿,我来帮你搞定这个Chrono计时和字符串拼接的问题!你遇到的两个错误其实都是因为没正确处理std::chrono::milliseconds的数值类型,以及误用了C风格字符串的拼接函数,我来一步步给你讲清楚怎么改:

先说说你出错的原因

  • 第一个错误:std::chrono::milliseconds是一个时长类型,不是单个字符,你不能直接把它赋值给char变量。要获取它代表的毫秒数,必须调用.count()方法,这个方法会返回对应的整数值(类型是long long,因为chrono默认用64位整数存储时长)。
  • 第二个错误:strcat函数要求第二个参数是C风格字符串(const char*),但你传了一个char类型的变量,类型完全不匹配,自然会报错。

方法1:延续你的C风格char数组写法(安全版)

如果想继续用char数组,推荐用snprintf来格式化字符串,它比strcat+手动转换更安全,能避免缓冲区溢出:

#include <chrono>
#include <cstring>
#include <cstdio>

using namespace std::chrono;

int main() {
    system_clock::time_point StartTime = system_clock::now();
    // 这里放你要计时的代码逻辑
    system_clock::time_point FirstPartEndTime = system_clock::now();
    
    // 计算耗时并提取毫秒数值
    milliseconds mill = duration_cast<milliseconds>(FirstPartEndTime - StartTime);
    long long ms_value = mill.count(); // 拿到真正的毫秒数
    
    char test[70] = "The required time is as follows :";
    // 把毫秒数追加到字符串末尾,注意留足缓冲区空间
    snprintf(test + strlen(test), sizeof(test) - strlen(test), " %lld ms", ms_value);
    
    // 测试输出
    puts(test);
    return 0;
}

方法2:用C++风格的std::string(更推荐)

如果用C++的标准字符串,操作会更简单,完全不用操心缓冲区大小的问题,代码可读性也更高:

#include <chrono>
#include <string>
#include <iostream>

using namespace std::chrono;

int main() {
    system_clock::time_point StartTime = system_clock::now();
    // 你的计时代码
    system_clock::time_point FirstPartEndTime = system_clock::now();
    
    milliseconds mill = duration_cast<milliseconds>(FirstPartEndTime - StartTime);
    long long ms_value = mill.count();
    
    // 直接用std::to_string转换数值并拼接
    std::string test = "The required time is as follows : " + std::to_string(ms_value) + " ms";
    
    // 如果需要更复杂的格式化(比如小数、特殊格式),可以用stringstream
    // std::stringstream ss;
    // ss << "The required time is as follows : " << ms_value << " ms";
    // std::string test = ss.str();
    
    std::cout << test << std::endl;
    return 0;
}

总结一下:核心就是用.count()从std::chrono::milliseconds里提取真正的毫秒数值,然后根据你的代码风格选择C或C的字符串拼接方式。如果是新项目,优先用C的std::string或stringstream,能减少很多内存安全问题。

内容的提问来源于stack exchange,提问作者Gaon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 17:42:32