int sprintf_s(char *,size_t,const char *,...)”: 不能将参数 2 从“const char [3]”转换为“size_t”

2014-03-02 20:14

在编译下列代码时,出现以下错误: 
cpp(23) : error C2664: “int sprintf_s(char *,size_t,const char *,...)”: 不能将参数 2 从“const char [3]”转换为“size_t” 
请问这是什么意思?该怎么修改? 
#include<iostream> 
#include<string> 
#include<stdio.h> 
using namespace std; 
string dec_to_hex(double ); 
int main(){ 
double x; 
string str; 
cout<<"please input a decimal number:\n"; 
cin>>x; 
str=dec_to_hex(x); 
cout<<str; 

string dec_to_hex(double x){ 
char* ch[20]; 
string str,str1; 
int n=int(x),num,count; 
double m=x-n; 
while(n){ 
count=0; 
num=n%16; 
n=n/16; 
    sprintf_s(ch[count],"%x",num); 
count++; 

for(unsigned i=count;1>0;i--){ 
str.append(ch[i-1]); 

    cout<<str<<endl; 
return str; 
}

回复讨论(解决方案)

sprintf_s(ch[count],1,"%x",num);

第二个参数是长度 无符号int型

sprintf_s()是sprintf()的安全版本,通过指定缓冲区长度来避免sprintf()存在的溢出风险 
即第二个参数为size_t,指缓冲区的最大长度

sprintf_s()是sprintf()的安全版本,通过指定缓冲区长度来避免sprintf()存在的溢出风险 
即第二个参数为size_t,指缓冲区的最大长度 
+1

知道了!谢谢各位!

转自:http://www.itnose.net/detail/973571.html

时间: 2024-10-03 18:55:31

int sprintf_s(char *,size_t,const char *,...)”: 不能将参数 2 从“const char [3]”转换为“size_t”的相关文章

error: C2664: “zajiao::zajiao(const zajiao &amp;)”: 无法将参数 1 从“const char [12]”转换为“char *”

原本打算用一个字符串"ABCDEF12345"作为类zajiao的构造函数的参数,用来创建类zajiao的对象zajiao1. 1 zajiao zajiao1("ABCDEF12345"); 结果提示: F:\Users\denggelin\Documents\qtduojicheng\main.cpp:31: error: C2664: “zajiao::zajiao(const zajiao &)”: 无法将参数 1 从“const char [12]

error C2665: “operator new” : 5个重载中没有一个可以转换参数1(从“const char [71]”类型)

error C2665: "operator new" : 5个重载中没有一个可以转换参数1(从"const char [71]"类型) 这个错误是怎么回事啊,搜索了整个项目好像没有可疑的new操作阿.这个错误是在将两个工程合并成一个过程中产生的.合并前没有这样的错误. MainFrm.cpp d:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xmemory(34) : error C266

[转]不能将参数1从“const char []”转换为“LPCTSTR

今天在使用vs2008+MFC时候,使用editControl的replacesel(“”)发生报错.如下::不能将参数1从“const char []”转换为“LPCTSTR” 其解决方案就是, 在项目属性里面找到项目默认值下面的字符集, 将其换为:使用多字节字符集就ok了.原因: typedef   LPCTSTR    LPTSTR ; #ifndef   _UNICODE    typedef   TCHAR   char;    #else    typedef   TCHAR   w

MFC之调用DLL的问题:error C2664: “LoadLibraryW”: 不能将参数 1 从“const char *”转换为“LPCWSTR

今天在项目中遇到了一个小小的问题,在调用别人动态连接库(DLL)的时候,总是出现如下提示,导致程序无法正常运行,编程环境:VS2010+MFC 问题提示:error C2664: "LoadLibraryW": 不能将参数 1 从"const char *"转换为"LPCWSTR 经过查找资料,问题得以解决,感谢: 解决方法来源于:http://blog.sina.com.cn/s/blog_6a2236590100xbgl.html 1 静态调用Lib

error C2664: “CWnd::MessageBoxW”: 不能将参数 1 从“const char [17]”转换为“LPCTSTR

MFC中给某个菜单项添加一个事件处理程序: 1.      void CMainFrame::OnTest()   2.      {   3.            MessageBox("you clicked Menu item.");   4.            // TODO: 在此添加命令处理程序代码    5.      }   编译时报告如下错误:error C2664: "CWnd::MessageBoxW": 不能将参数 1 从"c

不能将参数 2 从“const char *”转换为“LPCWSTR”

不能将参数 2 从“const char *”转换为“LPCWSTR” 2013-06-05 17:18 阅读(309)评论(0)编辑删除 error C2664: “LoadImageW”: 不能将参数 2 从“const char *”转换为“LPCWSTR” 解决办法:将Project的属性里头的 字符集使用Unicode改成“未设置”. 属性->配置属性->常规->项目默认值->字符集->Unicode改成“未设置”.

error C2664: “MessageBoxW”: 不能将参数 2 从“const char [14]”转换为“LPCWSTR”

vs2008提示 error C2664: “CWnd::MessageBoxW”: 不能将参数 1 从“const char [17]”转换为“LPCTSTR” 在外面用vs2005编写mfc程序的时候经常要MessageBox("提示信息")函数,在vc6.0是没有问题的,但是在vs2005却会有下面的提示: error C2664: “CWnd::MessageBoxW”: 不能将参数 1 从“const char [17]”转换为“LPCTSTR” 这个错误提示的原因是VS20

C++const类型的引用参数

string类定义了一种char*到string的转换功能,这使得可以使用C-风格字符串来初始化string对象. 类型为const引用的形参其中一个属性表明:假设实参的参数类型与引用参数不匹配,但可以转换为引用类型,程序将创建一个正确类型的临时变量,使用转换后的实参值来初始化它,然后传递一个指向该临时变量的引用. 上面提到const引用为形参的属性,也就是说,如果引用的参数是const,则编译器在某些情况下会生成临时变量,比如下面这两种情况:1, 实参类型不正确,但可以转换为正确类型.2, 实

【C语言】函数参数中的const修饰符

  通常,字符串操作函数原型中,都会在形参前面加上const修饰符,表示此指针不能用于修改字符串的值   比如:char *strcpy(char *strDest, const char *strSrc)  但是可不可以通过 在函数里定义一个指针指向strSrc,来改掉字符串的值呢? 给出以下代码: #include <STDIO.H> #include<stdlib.h> void fuc(const char *p) { char *q = p; *q='b'; } int