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 之后,编译器会自动生成默认的拷贝构造函数,但在某些情况下,这种自动生成的拷贝构造函数可能会导致意外的行为,因此被标记为被废弃的。

暴力的解决方案:

设置编译器选项

bash 复制代码
g++ -Wall -Wextra -Wno-error=deprecated-copy -Wno-error=format-overflow= your_file.cpp -o your_program
相关推荐
风骏时光牛马1 小时前
生成一个AI多模态标题,仅输出一条标题,无额外文字、问句、备选、配图、文案等任何附加内容,不需要其他的任务服务 只要标题。
前端
测试界的小码农1 小时前
【Linux 命令实战(06):Linux 文件权限管理,掌握 chmod、chown、chgrp】
linux·运维·服务器
wangruofeng1 小时前
从 GIF 到 AVIF:网页图片格式演进与 2026 年选型指南
前端·架构
清晨Coding2 小时前
为什么用 React Developer Tools 查看组件树这么乱?
前端·react.js
艺杯羹2 小时前
1Panel 装好后 ufw 仍是 inactive:一次服务器安全盲区复盘
服务器·数据库·安全·网络安全·系统架构·实战·1panel
鶴哥只手遮天3 小时前
《Electron 45.2.3 内核解剖》第 4 章 补丁体系:380 个补丁改了什么
前端·electron
一条破秋裤3 小时前
【1114】【并发控制】【笔记】
linux
2035去旅行4 小时前
ADB的底层原理
linux·adb·嵌入式·arm·soc
武子康5 小时前
单卡 A6000 跑 Qwen-Drive:怎样留下可比较的第一条基线?
linux·人工智能·深度学习
女神下凡5 小时前
芯参谋(107):杰理AC_中科蓝讯_开发指南
linux·服务器·网络·单片机·嵌入式硬件