关于sprintf_s函数的疑问。

SoulLove-晨曦 2015-02-02 07:43:34
在搞一个数字字典生成的函数,还没写完,代码如下:
void GenerateDigital(const unsigned int len){
char *temp = new char[len];
char **p_temp = &temp;
for (int i = NULL; i < pow(10,len); i++){
sprintf_s(temp,strlen(temp), "%d", i);
cout << *p_temp << endl;
}
}


其中下面一段代码有些让我不得其解
sprintf_s(temp,strlen(temp), "%d", i);

sprintf_s函数的第二个参数应该是缓冲区的长度,但是在这种情况下如果使用sizeof则会返回temp指针的长度4
如果要用strlen的话会出错,因为temp这时候还没定义。
难道这种情况下就只能强行指定一个宽度吗?有什么好的解决办法?

顺便问一下,在C++中,我习惯性的将NULL当做0来定义变量,这样做是否不妥?比如:
int n=NULL;



...全文
223 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-02-03
  • 打赏
  • 举报
回复
#pragma warning(disable:4996)
SoulLove-晨曦 2015-02-02
  • 打赏
  • 举报
回复
抱歉,二楼说的也都很正确,已经修正。
SoulLove-晨曦 2015-02-02
  • 打赏
  • 举报
回复
你好,VS2013已经将sprintf禁用,仅能使用sprintf_s。 new char [len] 这里不需要+1,因为这里的数值代表位数,后面已经使用pow(10,len)进行计算。 将1楼所说和2楼所说的结合一下,问题解决了,非常感谢。 :-)
sprintf_s(temp,len+1, "%d", i);
merlinfang 2015-02-02
  • 打赏
  • 举报
回复
代码要写成new char[len+1] ,预留/0结尾 另外这种长度已知的,直接sprintf(temp, "%d", i);就行了
encoderlee 版主 2015-02-02
  • 打赏
  • 举报
回复
char *temp = new char[len]; 这里给temp分配了len个char,即len个字节的内存, 那么 sprintf_s的时候, sprintf_s(temp,len, "%d", i);就好了。 int n=NULL;在使用上不会出什么问题。 但是从编码风格上将,指针用NULL,数值型变量用0会更规范 int n = 0; int *p = NULL;

64,639

社区成员

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

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