Qt中sprintf_s函数的问题

如题,以下两个图是 VC和QT的测试图,求大神解答一下

图片说明图片说明

qt vc
0

1个回答

Qt用的什么编译器,如果是gcc,不一定支持,用snprintf代替。https://www.cnblogs.com/dirt2/p/6104198.html

1
hhf15980873586
单单单单点 g++,你这么一说好像有点明白了
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
sprintf_s函数怪异的问题
PFILEINFO p;rn p=stor.GetHand();rn char buffer[MAX_PATH]=0;rn char temp[MAX_PATH]=0;rn int sum=0;rn while(p->Next)rn rn wcstombs(temp,p->FileName.GetBuffer(p->FileName.GetLength()),MAX_PATH);rn sum+=sprintf_s(buffer+sum,MAX_PATH,"\n文件: %s delete!",temp); rn p=p->Next;rn rnrn本段代码,有什么不对的吗?为什么我在执行时发现,当循环进行第二次时,sum+=sprintf_s(buffer+sum,MAX_PATH,"\n文件: %s delete!",temp);执行完毕后,P指针的地址被更改了,为什么?rn 帮助解答下
关于sprintf_s函数的疑问。
在搞一个数字字典生成的函数,还没写完,代码如下:rn[code=c]void GenerateDigital(const unsigned int len)rn char *temp = new char[len];rn char **p_temp = &temp;rn for (int i = NULL; i < pow(10,len); i++)rn sprintf_s(temp,strlen(temp), "%d", i);rn cout << *p_temp << endl;rn rn[/code]rnrn[color=#FF0000]其中下面一段代码有些让我不得其解[/color]rnsprintf_s(temp,strlen(temp), "%d", i);rnrn[color=#FF0000]sprintf_s函数的第二个参数应该是缓冲区的长度,但是在这种情况下如果使用sizeof则会返回temp指针的长度4rn如果要用strlen的话会出错,因为temp这时候还没定义。rn难道这种情况下就只能强行指定一个宽度吗?有什么好的解决办法?rnrn顺便问一下,在C++中,我习惯性的将NULL当做0来定义变量,这样做是否不妥?比如:rnint n=NULL;[/color]rnrnrn
关于函数sprintf_s()用法的疑问
使用函数sprintf_s(),初始用法如下:rn[code=c]rnchar* msg = new char[100];rnsprintf_s(msg, ...);rn[/code]rn,编译不能通过,报error:the second paramater can't covert from char[74] to size_t,百思不得解,将代码做如下改动:rn[code=c]rnchar mag[100];rnsprintf_s(msg, ...);rn[/code]rn,编译通过,请问各位这是什么原因?rnrn查了下,它的原型如下:rn[code=c]rn函数原型:rnint sprintf_s(rnchar *buffer,rnsize_t sizeOfBuffer,rnconst char *format [,rnargument] ...rn);rn[/code]rn
一个关于sprintf_s函数的小问题.
有语句rnchar pTabName[]="123";rnchar pTabNote[]="456"rnchar pPlayerIDName[]="789";rnchar valueBuf[20];rn执行下边语句后rnsprintf_s(valueBuf,"'%s','%s','%s'",pTabName,m_TabNote,m_PlayerIDName);rnrn为什么valueBuf里的内容为:"'123','4','7'",而不是:"'123','456','789'"
opencv中sprintf_s出错
[img=https://img-bbs.csdn.net/upload/201406/15/1402835860_604700.jpg][/img]rn程序如下:rn CvPoint LeftTriPoint[3];rn char MatchedPointStr[2048];rn sprintf_s(MatchedPointStr,"L:(%d,%d),(%d,%d),(%d,%d)",rn LeftTriPoint[0].x,LeftTriPoint[0].y,rn LeftTriPoint[1].x,LeftTriPoint[1].y,rn LeftTriPoint[2].x,LeftTriPoint[2].y);rn会出现如图所示错误,什么原因?
关于sprintf_s的使用问题
在开发一个项目过程中,由于使用了最新版的开发环境,因此sprintf函数默认被开发环境禁止,出于养成好习惯的心思,我开始使用了sprintf_s函数,但这个函数着实坑了我一把,见下面代码: DWORD mcoluncunt = 500; LPBYTE mConfigInfoList = (LPBYTE)zalloc(mcoluncunt*200); CString mTemp = "test f
关于sprintf_s与sscanf_s的问题?
[color=#FF6600]问题1:[/color]rn[code=C/C++]rn rn char* p = new char[6];rn p = "00000";rn sprintf_s( p, 6, "%05d", 100);rn delete []p;rn[/code]rn这段代码,先给p 赋值以后 再用sprintf_s就会出现内存访问错误?这个怎么解释?rn[color=#FF6600]问题2:[/color]rn[code=C/C++]rn char* Date = "20120926";rn unsigned char ucTemp(0);rn sscanf_s( (char*)Date, "%2的", &ucTemp);rn[/code]rn这段代码,执行的时候不会出现问题,但是在程序结束的时候,就会出现堆栈问题. 我估计是因为我用%d的格式化成int型,但是放进一个UCHAR类型的变量, 在最后程序结束的时候释放变量ucTemp的时候出现堆栈问题!不知道这样的解释对不对! [color=#FF0000]但[/color]是当我把ucTemp作为一个全局变量的时候就不会出问题? 这样是不是我的解释就有问题!
C++ sprintf_s 简单问题
[img=https://img-bbs.csdn.net/upload/201309/16/1379301278_107730.png][/img]rnrn请问以上是什么错误??
请问一个sprintf_s的问题???
sprintf_s(buffer,[color=#FF0000]"%.0f"[/color],m_nResult)rn请问一下上面函数红字部分""%.of""是什么意思??还有其他几个%*的意思??以前看见书上有的,现在要用找不到了,哪位告诉下,不胜感谢......
sprintf_s参数问题??
我得知sscanf_s的参数,如果是字符串,则需要给出字符串的长度,如:rnrnchar sz[256] = "123" ;rnchar szOut[256];rnsscanf_s(sz, 256, "%s", szOut, 256);rnrn可是sprintf_s这样做却会崩溃,那sprintf_s的格式化参数如果是字符串,不需要给出其长度么??rnsprintf_s(sz, "%s", "456"); 这样就行?rn而不是sprintf_s(sz, "%s", "456", strlen("456")+1); ??
sprintf_s的问题 求教
原来的程序在VS2008运行是OK的 因为我电脑是VC6 就会出现下面这个错误 rn错误:rnerror C2065: 'sprintf_s' : undeclared identifierrnrn我在这个.cpp里面添加了 #include 可还是同样的问题 请问如何解决
关于sprintf和sprintf_s的问题
好讨厌这个sprintf_s 以前学VC6的时候都是用sprintf格式化字符串,用了VS2015的版本后sprintf就不可以用了,只能用sprintf_s说这安全性更高,如果是正常的char[]数组格式化就没事通过,当要将char*格式化的时候编译就不通过,只能将char*转换成char[]然后再用sprintf_s,这样就变得好麻烦了,各位大神有木有更简便的方法,或者函数来格式化字符指针……
sprintf和sprintf_s的问题,急
第一段代码是多字节的rn[code=c]char cSysDir[MAX_PATH];rn CString strBuf;rn memset(cSysDir,0,MAX_PATH);rn GetWindowsDirectory(cSysDir,MAX_PATH);//cSysDir=="C:\\WINDOWS"rn strBuf = cSysDir;//strBuf =="C:\\WINDOWS"rn int n = strBuf.Find("\\") + 1;//n=3rn CString temp = strBuf.Left(n);//temp=="C:\\"rn sprintf(cSysDir, "%s", temp);//cSysDir=="C:\\"[/code]rnrnrn第二段代码是Unicodern[code=c]char cSysDir[MAX_PATH];rn CString strBuf;rn memset(cSysDir, 0, MAX_PATH);rn GetWindowsDirectoryA(cSysDir, MAX_PATH);//cSysDir=="C:\\WINDOWS"rn strBuf = cSysDir;//strBuf =="C:\\WINDOWS"rn int n = strBuf.Find(_T("\\")) + 1;//n=3rn CString temp = strBuf.Left(n);//temp=="C:\\"rn sprintf_s(cSysDir, 260, "%s", temp);//cSysDir=="C"[/code]rnrn为什么最后cSysDir的内容只有一个C?
一个关于sprintf_s的问题
[code=c] rnchar* pChar = new char[3];rnmemset(pChar, 0, 3);rnsprintf_s( pChar, 3, "%02d", 0xff);rnprintf(pChar);rndelete pChar;[/code]rn代码如上,0xff变成十进制是255长度等于3,加上/0就超过3了!所以会报错!rn但是我用了“%02d”,怎么不能控制到长度为2?
sprintf_s函数用法
sprintf_s是一个函数,其函数功能是将数据格式化输出到字符串。sprintf_s对于格式化string中的格式化的字符的有效性进行了检查,sprintf_s也携带着接收格式化字符串的缓冲区的大小。 sprintf_s将格式化字符串存到缓冲区,如果格式化字符串过大,则sprintf_s会返回一个空string和设置无效参数句柄为激活。 函数原型: int sprintf_s(
Qt中connect()函数的问题
这个问题比较简单,但是没怎么用过Qt所以请教下,问题如下:rn 我在 b.cpp中 emit一个信号,A.cpp 响应这个信号,rn 但是我在 a.cpp中的 connect函数 的第一个参数这个对象,我从哪里定义这个么对象呢? 莫非是 b.cpp的对象?rn 费解。。。请高人来个简单的例子~!
qt中的connect函数的问题?
为什么在编译的时候会有这样的错误呢?rnimplicit declaration of function int clicked(...).rnno implicit declaration of function call to MyMainWin::Connect(...)rnrn我看了一下,语法没有错误。。呜呜。
QT中的paintEvent()函数问题
[img=https://img-bbs.csdn.net/upload/201603/09/1457489800_218447.jpg][/img]rnrn我在QT的widget那个模板中新加了一行代码,然后就编译不过去了,但是去掉这行代码就可以编译,一开始怀疑是没有添加头文件,但是我添加了一些头文件之后还是报错rnrn[img=https://img-bbs.csdn.net/upload/201603/09/1457489638_275779.jpg][/img]rnrn请问大家是哪里的问题啊?
qt中sprintf()函数的问题
我要用sprintf格式化一段字符串,sql.sprintf("insert into area_info values('%s','%s','%s','%s')",qPrintable(s1),qPrintable(s2),qPrintable(s3),qPrintable(s4));其中s4="字段",运行后,sql字符串中不能正确的将s4格式化到字符串中,请问用什么方法将带汉字的字符串格式化
sprintf_s 的ANSI和UNICODE的定义函数是什么?
我说的是 比如 _tcslen ANSI被定义为 strlen UNICODE被定义为 wcslenrnrnsprintf_s的这种定义是哪个函数 找不到。。。
sprintf_s()输出格式?
sprintf_s(szEditBuf[color=#FF0000],"%s%s[/color]", pkInput->D1550_SVCSRUCD, pkInput->D1550_SVCITEMCD);
sprintf,sprintf_s
sprintf,sprintf_s 等函数的作用? 与multicharwide有什么区别?
sprintf_s函数char数组转换CString
CString a="12345";rnsprintf_s(buf, "%S ",a); rn以上转换时可以的rnCString a="快疯了";rnsprintf_s(buf, "%S ",a); rn调试输出buf为什么等于“ ”没有 怎么转才可以rn
新手请教:关于sprintf_s()函数的用法
在编译下列代码时,出现以下错误:rncpp(23) : error C2664: “int sprintf_s(char *,size_t,const char *,...)”: 不能将参数 2 从“const char [3]”转换为“size_t”rn请问这是什么意思?该怎么修改?rn#includern#includern#includernusing namespace std;rnstring dec_to_hex(double );rnint main()rn double x;rn string str;rn cout<<"please input a decimal number:\n";rn cin>>x;rn str=dec_to_hex(x);rn cout<0;i--)rn str.append(ch[i-1]);rn rn cout<
在VC++2008里面使用sprintf_s的问题
int h,m,srnh = ....rnm = ....rns = ....rnrn现在问题来了,我想把这三个int组合成12:34:56这样的时钟格式,存到stime里。rn如果rnchar stime[9];rnsprintf_s(stime,"%02d:%02d:%02d",h,m,s);rn一切正常,能获得正确结果rnrn如果rnchar *stime;rnsprintf_s(stime,"%02d:%02d:%02d",h,m,s);rn则error C2664: “int sprintf_s(char *,size_t,const char *,...)”: 不能将参数 2 从“const char [15]”转换为“size_t”rnrn问题是我的输出字符串是作为参数给进来的,传一个char型指针肯定比传个char数组要靠谱,那么有什么解决方案呢
C++ Sprintf_s函数补全缺省内容和MySqL数据库
我数据库里面的字段类型是varchar,现在有name和password两个字段rn现在要update,比如rnupdate logininfo set password = '222' where name='111';rn 用sprintf_s可以动态设置password和name的值rn[img=https://img-bbs.csdn.net/upload/201908/01/1564644279_32846.png][/img]rnrnC语言里,%s是C风格的字符串,不是string吧,rn所以我用string.data函数把string类型转换为char类型rnrnchar update_sql[255]; rnsprintf_s(update_sql, "update logininfo set password = %s where name = %s", s1.data(),s2.data());rn转完以后sprintf_s函数是可以了,但是sprintf_s的结果update_sqlrn数据库不识别了,我调试过了,sprintf_s成功把s1s2的值传进去了rnrnmysql_query(&ceshi, update_sql);rn编译器执行mysql_query语句返回错误,rn是因为update_sql里的password和name的值是char类型的?rnrn以前直接rnstring sql3 = "update logininfo SET password = '2018'where name='2018'";rnmysql_query(sql3);rn编译器是能执行成功的rn想用sprintf成功设置update语句的string类型的参数求大神指教!自己弄了一上午了,很难受rn
vc 的 sprintf_s函数没有任何效果
对应sprintf的安全版本有snprintf和_snprintf两个,听说VC下有个是sprintf_s,但是好像没有任何效果,如下面的代码是溢出错误的:rn[code=C/C++]har buff[265];[/code]rnint main()rnrn char buff[4];rn sprintf_s(buff,sizeof(buff),"hello world");//出错rnrn return 0;rnrn 然而下面的代码则是正确的,但是编译是警告:snprintf声明为否决的:rnint main()rnrn char buff[4];rn snprintf(buff,sizeof(buff),"hello world");//正常rnrnrn到底是什么原因呢?rn
求助:关于sprintf_s使用的问题
char sql[1024] = 0;rn sprintf_s(sql,1024, "SELECT SQL_CACHE s.seq_id, s.cycle, s.step_id ,s.step_type, s.work_type, s.test_time,s.test_vol, \rn s.test_cur, s.test_ir, s.test_tmp, s.test_cap, s.test_eng, s.middle_vol from cap_step as s WHERE \rn s.dev_uid=%d AND s.unit_id=%d AND s.chl_id=%d AND s.test_id=%d AND s.step_id > %d AND s.cycle=%d", rn ConverUID(btDevType,pChl->dev_id), pChl->unit_id, pChl->chl_id,nTestID,wStepID,dwCycle);rn得到的结果是 s.unit_id 每次都是等于0,但是实际值wStepID却不是0,每次都是在这个位置出现问题,换成其他的也是0rn
QT中的函数
QT中的函数很多 我想问的是 对于这些函数 是看一点记一点 还是记得有这些操作就行 等需要的时候才重新查看
qt中的connect函数
1、connect()函数实现的是信号与槽的关联。 注意:只有QO bject类及其派生的类才能使用信号和槽的机制 2、函数原型 在第一个函数中:第一个参数为发射信号的对象,例如后面的dlg;第二个参数是要发射的信号,例如后面的 SIGNAL(dlgReturn(int));第三个参数是接受信号的对象,例如后面的this,表明是本部件,即Widget,当这个 参数是this时,可
sprintf_s使用错误
void GetCurTime(char* pTempCh,uint nSize)rnrn time_t t=0;rn struct tm ltm;rn t = time(NULL);rn errno_t nError = localtime_s(&ltm,&t);rn if(nError != 0)rn rn sprintf_s(pTempCh,nSize,"0%lu",uint(t)); rn rn elsern rn char pTemp[5];rn memset(pTemp,0,5);rn sprintf_s(&pTempCh[0],nSize,"%d",ltm.tm_year + 1900);rn if( ltm.tm_mon+1 >=0 && ltm.tm_mon+1 < 10 )rn rn sprintf_s(&pTempCh[4],nSize,"0%d", ltm.tm_mon + 1);rn rn elsern sprintf_s(&pTempCh[4],nSize,"%d", ltm.tm_mon + 1);rn if(ltm.tm_mday >= 0 && ltm.tm_mday < 10)rn rn sprintf_s(&pTempCh[6],nSize,"0%d",ltm.tm_mday);rn rn elsern sprintf_s(&pTempCh[6],nSize,"%d",ltm.tm_mday);rn if(ltm.tm_hour >= 0 && ltm.tm_hour < 10)rn rn sprintf_s(&pTempCh[8],nSize,"0%d",ltm.tm_hour);rn rn elsern sprintf_s(&pTempCh[8],nSize,"%d",ltm.tm_hour);rn if(ltm.tm_min >= 0 && ltm.tm_min < 10)rn rn sprintf_s(&pTempCh[10],nSize,"0%d",ltm.tm_min);rn rn elsern sprintf_s(&pTempCh[10],nSize,"%d",ltm.tm_min);rn if(ltm.tm_sec >= 0 && ltm.tm_sec < 10)rn rn sprintf_s(&pTempCh[12],nSize,"0%d",ltm.tm_sec);rn rn elsern sprintf_s(&pTempCh[12],nSize,"%d",ltm.tm_sec);rn rnrnrn调用方式:rnchar pCh[16];rnmemset(pCh,0,16);rnGetCurTime(pCh,16);rnrn 大家帮我看看这段代码有什么问题?谢谢rnrnrnrnrn
Qt输出函数的问题
GTK中有g_print("hello world\n")可以把hello word输出到现实屏上rn这个功能在Qt中对应的是哪个函数?rn找不到?
QT layout()函数问题
QHBoxLayout* hbox = new QHBoxLayout(this);rnQVBoxLayout* vbox1 = new QVBoxLayout();rnQVBoxLayout* vbox2 = new QVBoxLayout();rn((QHBoxLayout*)layout())->addLayout(vbox1);rn((QHBoxLayout*)layout())->addLayout(vbox2);rnrn为什么我这样写运行时刻是错误的呢??rnrnrnQHBoxLayout* hbox = new QHBoxLayout(this);rnQVBoxLayout* vbox1 = new QVBoxLayout();rnQVBoxLayout* vbox2 = new QVBoxLayout();rnhbox->addLayout(vbox1);rnhbox->addLayout(vbox2);rn这个是正确的rnrn((QHBoxLayout*)layout())不可以类型转换么??还是函数用的不对rn获取一个窗口布局管理器是这个接口么???rn
有没有个sprintf_s函数功能类似但不输出的函数
我定义了一个rnTCHAR szBuf[MAX_PATH];rn有一个THCAR *lpMsgBuf;rn我想实现和下面函数类似的功能,就是把东西放进szBuf里面,但是我不要输出rnsprintf_s(szBuf,TEXT("Error code is %d:\r\n %s"),ErrorCode,lpMsgBuf);rn有这样的函数吗rn
sprintf_s的用法探究
这个函数定义如下int sprintf_s( char *buffer, size_t sizeOfBuffer, const char *format [, argument] ... );参数说明是这样的,第一个参数buffer是输出存储位置,第二个参数sizeOfBuffer是最大允许的字符数。下面通过代码简单探究一下这个函数的应用,如果以后有更好的例子会持续...
sprintf如何转换成sprintf_s
//sprintf(&(output1[2*i]),"%02x",(unsigned char)digest[i]);rn //sprintf(&(output1[2 * i + 1]), "%02x", (unsigned char)(digest[i] << 4));rn sprintf_s(&output1[2 * i], sizeof("%02x"), "%s", digest[i]);rn sprintf_s(&output1[2 * i + 1], sizeof("%02x"), "%s", (digest[i] << 4));rnrnrn上面两行注释的是以前的老版本,,,我用VS2013打开提示不安全,建议使用sprintf_s,,,下面两行是修改后的,,但修改后,.程序就不能用了,.....也没报错,,,,,,结果不对,,,谁能帮看下 要如何转换成 sprintf_s
C++ sprintf_s 字符串拼接
定义一个buf  格式如下: char buf[128] = {0}; 例子: sprintf_s(buf,128,"%s%d",appGetGlobal()->getText("id"),appGetGlobal()->getVersion()); m_versionLabel = CCLabelTTF::create(buf,"Arial",20,CCSizeMake(200,25),
Qt中关于setGeometry()函数的问题
这个函数是相对父窗口的。QDialog的父窗口的桌面
QT中多线程,函数无法执行的问题
在项目中碰到了一个问题,如果初始化一个线程,这个线程不执行完毕的话,那么再次调用其余线程则不会执行。猜想其可能被阻塞,后来查找了一些资料发现原因如下。 这是我开启线程的方式:     CustomRunnable* runnable = new CustomRunnable();     runnable->setCallbackFunction(SerialPortReadThread
Qt QString 中Split函数的使用问题
问题描述:在一个文件中存放着 3行的数据,第一行为两个字符类型,第二行是两个 int 类型,第三行是一个 int 类型。rn测试数据:rnP5rn384 128rn255rn然后我就使用 QString 中的 split 函数进行字符串的分割,程序直接崩溃了,找了半天不知道从哪里下手,求教!rn[code=c] QFile Temp_Read ( "C:/Users/Dell/Desktop/Qt/File_Out/Temp" ) ;rn if( !Temp_Read.open( QIODevice::ReadOnly ) )rn rn qDebug()<< "文件 Temp 无法被打开!"<