• GCC多平台编译会遇到小问题


    1、

    /root/dev/rinetd/src/stdafx.h:461:28: error: ‘%d’ directive writing between 1 and 11 bytes into a region of size 3 [-Werror=format-overflow=]
      461 |             sprintf(temp, "%d", source);
          |                            ^~
     

    这个错误是由于在使用 %d 格式化字符串时,写入的字节数超过了目标缓冲区的大小所导致的。编译器检测到这种情况,并将其视为潜在的漏洞,因此将其报告为错误。

    要解决这个错误,你可以采取以下几种方式之一:

    1. 检查你的格式化字符串和目标缓冲区的大小是否匹配。确保目标缓冲区足够大以容纳要写入的数据,或者调整格式化字符串以适应目标缓冲区的大小。
    2. 如果你确定目标缓冲区的大小是正确的,并且只想截断输出以适应目标缓冲区,可以考虑使用 %.*d 的格式化字符串,其中 * 是一个占位符,表示要在运行时提供一个整数参数来指定要截断的长度。例如,printf("%.*d", bufferSize, num)

    2、

    /root/dev/rinetd/src/packet/IPEndPoint.h:484:20: error: implicitly-declared ‘constexpr IPEndPoint::IPEndPoint(const IPEndPoint&)’ is deprecated [-Werror=deprecated-copy]
      484 |             return destinationEP;
          |                    ^~~~~~~~~~~~~

    这个错误表明在你的代码中使用了被废弃的拷贝构造函数。在 C++11 之后,编译器会自动生成默认的拷贝构造函数,但在某些情况下,这种自动生成的拷贝构造函数可能会导致意外的行为,因此被标记为被废弃的。

    暴力的解决方案:

    设置编译器选项

    g++ -Wall -Wextra -Wno-error=deprecated-copy -Wno-error=format-overflow= your_file.cpp -o your_program

  • 相关阅读:
    VCS工具学习笔记(7)
    FFN -> GLU -> GAU
    uniapp滚动加载
    使用CSS的offset-path属性让元素沿着不规则路径运动
    在Gin框架中加入Zap日志中间件
    【Windows安装RabbitMQ详细教程】
    Go语言Web开发Echo框架搭建
    微信小程序Vue+nodejs+uniapp课堂教学辅助在线学习系统
    七、【React-Router5】嵌套路由
    Remix 开发小技巧(二)
  • 原文地址:https://blog.csdn.net/liulilittle/article/details/134506363