关于sprintf和sprintf_s的问题

KuBabys 2015-10-09 07:48:00
好讨厌这个sprintf_s 以前学VC6的时候都是用sprintf格式化字符串,用了VS2015的版本后sprintf就不可以用了,只能用sprintf_s说这安全性更高,如果是正常的char[]数组格式化就没事通过,当要将char*格式化的时候编译就不通过,只能将char*转换成char[]然后再用sprintf_s,这样就变得好麻烦了,各位大神有木有更简便的方法,或者函数来格式化字符指针……
...全文
545 15 打赏 收藏 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
KuBabys 2015-10-09
  • 打赏
  • 举报
回复
引用 3 楼 珍惜生命远离CPP的回复:
sprintf 本身就是应该禁止使用的东西,这种东西太容易给自己挖坑了。
也不能这么说,但是应该可以让开发人员选择用…
KuBabys 2015-10-09
  • 打赏
  • 举报
回复
引用 4 楼 赵4老师的回复:
#pragma warning(disable:4996)
...
赵4老师,是把这句代码加到代码前面吗?
KuBabys 2015-10-09
  • 打赏
  • 举报
回复
引用 1 楼 w13295350321的回复:
你可以在建项目的时候把安全编译去了。。
具体怎么去掉啊?
赵4老师 2015-10-09
  • 打赏
  • 举报
回复
#pragma warning(disable:4996)
...
  • 打赏
  • 举报
回复
sprintf 本身就是应该禁止使用的东西,这种东西太容易给自己挖坑了。
fefe82 2015-10-09
  • 打赏
  • 举报
回复
1. 你可以定义 _CRT_SECURE_NO_WARNINGS ,然后继续使用 sprintf 2. 你可以用 std::stringstream
无雨的鱼 2015-10-09
  • 打赏
  • 举报
回复
你可以在建项目的时候把安全编译去了。。
dustpg 2015-10-09
  • 打赏
  • 举报
回复
sprintf_s存在第二的参数,表示数组长度, 而且为了易用微软对于数组重载了sprintf_s, 指针的话, 需要手动提供缓存长度, 个人建议使用C99的snprintf, 可以预测缓存长度. 可惜没有自己的需要的snwprintf, 微软的_snwprintf根本就是两回事.
paschen 版主 2015-10-09
  • 打赏
  • 举报
回复
可以用,需要加上_CRT_SECURE_NO_WARNINGS宏 同时也建议用更安全的sprintf_s,因为原来的函数不会考虑是否溢出
KuBabys 2015-10-09
  • 打赏
  • 举报
回复
引用 10 楼 赵4老师的回复:
我就要走在老路上,我就要回到老地方!
你学了编程多久了,看你好像很牛逼啊!
KuBabys 2015-10-09
  • 打赏
  • 举报
回复
引用 8 楼 珍惜生命远离CPP的回复:
[quote=引用 7 楼 weixin_29034637 的回复:] [quote=引用 3 楼 珍惜生命远离CPP的回复:]sprintf 本身就是应该禁止使用的东西,这种东西太容易给自己挖坑了。
也不能这么说,但是应该可以让开发人员选择用…[/quote] 被坑的时候你就不会这么想了[/quote] 个人认为吧!其实微软搞这些函数加s全是为了提高安全性防止数组越界?
KuBabys 2015-10-09
  • 打赏
  • 举报
回复
引用 9 楼 赵4老师的回复:
[quote=引用 6 楼 weixin_29034637 的回复:] [quote=引用 4 楼 赵4老师的回复:]
#pragma warning(disable:4996)
...
赵4老师,是把这句代码加到代码前面吗?[/quote] 理解完全正确![/quote] 谢谢 …
赵4老师 2015-10-09
  • 打赏
  • 举报
回复
我就要走在老路上,我就要回到老地方!
赵4老师 2015-10-09
  • 打赏
  • 举报
回复
引用 6 楼 weixin_29034637 的回复:
[quote=引用 4 楼 赵4老师的回复:]
#pragma warning(disable:4996)
...
赵4老师,是把这句代码加到代码前面吗?[/quote] 理解完全正确!
  • 打赏
  • 举报
回复
引用 7 楼 weixin_29034637 的回复:
[quote=引用 3 楼 珍惜生命远离CPP的回复:]sprintf 本身就是应该禁止使用的东西,这种东西太容易给自己挖坑了。
也不能这么说,但是应该可以让开发人员选择用…[/quote] 被坑的时候你就不会这么想了
源码直接下载地址: https://pan.quark.cn/s/0c43ed5159df 本资源为HCDA认证培训教程,旨在面向准备参加HCDA考试的学员,或希望掌握TCP/IP基础、路由、交换技术、广域网、以太网技术基本原理以及华为通用路由平台VRP上实现的相关内容。具体涵盖的模块包括:Module 1-网络互联基础、Module 2-路由和路由协议基础与实现、Module 3-以太网交换技术基础与实现、Module 4-广域网技术基本原理与实现、Module 5-网络安全基础、Module 6-华为数通产品概述 ### 华为-NAT技术详解 #### 一、概述 NAT(Network Address Translation,网络地址转换)是一种在专用网络内部使用私有IP地址的情况下,使这些设备能够通过公有IP地址进行外部通信的技术手段。NAT技术在多种网络环境中得到广泛应用,特别是在企业网络中发挥着关键性作用。作为HCDA认证培训教程的一部分,本文档将系统性地阐述NAT的基础理论及其实现方法,并深入探讨在华为VRP平台上的具体应用场景。 #### 二、NAT处理流程 NAT处理流程主要包含两种类型:基于源IP地址和基于目的IP地址的处理模式。 ##### 1. 基于源IP地址的NAT处理 **1.1 一对一NO-PAT** 一对一NO-PAT即非端口地址转换(No-Port Address Translation),在这种模式下,一个私有IP地址对应一个公有IP地址,不涉及端口号的转换。当配置了NAT no-pat时,华为设备会为已配置的多通道协议产生的实际流量数据建立server-map表项。这种方式适用于需要固定公网IP的服务器等场景。 **1.2 多对一...

65,214

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧