草庐IT

sprintf_chk

全部标签

c++ - sprintf() 乱码输出

我有以下代码:charbuf[255];intID=0;doubleval=1.234;sprintf(buf,"%d@%.3lf",ID,val);printf("%s",buf);printf()正确打印了ID值,但是val值只是一些垃圾。你知道是什么原因导致这个问题吗?我在Win732位上使用MSVC9。更奇怪的是,上面的代码在64位机器上可以正常工作。在此先感谢您的帮助。 最佳答案 在这条评论之后:是的,还有一些额外的代码。这段代码被编译成一个DLL库,实际上我有三个地方调用问题中发布的代码,并且只有一个地方在输出垃圾中,如

c++ - sprintf 小数点太多/太少

我必须使用非科学(即无尾数/指数/E)字符串转换十进制数。我的代码如下所示:/*!\briefConvertsaXMLSchemaDecimal*/char*ToDecimal(doubleval)const{constsize_tnMax=200;char*doubleStr=newchar[nMax];sprintf(doubleStr,"%1.6f",val);returndoubleStr;}问题是,当输入val为1时,函数返回1.000000但我希望得到的输出1。另外,如果我将代码更改为sprintf(doubleStr,"%1.0f",val);那么它会正确输出1,但是如果

c++ - mingw-w64 : slow sprintf in <cstdio>

是吗C++中的header包含与相同的功能但输入std命名空间?我在使用mingw-w64编译的程序中遇到了奇怪的效率问题,它比在linux上慢十倍以上。经过一些测试,我发现问题出在sprintf中。.然后我做了如下测试:#include//#include//usingstd::sprintf;intmain(){inti;for(i=0;i使用编译时它比使用快15倍.这是时间:$time./stdioreal0m0.557suser0m0.046ssys0m0.046s$time./cstdioreal0m7.465suser0m0.031ssys0m0.077s$g++--ver

c++ - libgcc_s.so : undefined reference to `__stack_chk_fail@GLIBC_2.4'

起初我警告说我/不是程序员,而只是管理员我试图理解一些操作当我安装Oracle制作的程序时,我收到日志消息:/usr/bin/make-fins_precomp.mkrelinkORACLE_HOME=/u01/oracle/OraHome_1EXENAME=proc/Linking/u01/oracle/OraHome_1/precomp/lib/proclibgcc_s.so:undefinedreferenceto__stack_chk_fail@GLIBC_2.4'`ls-l../libgcc_s.so->/lib/libgcc_s.so.1所以接下来我尝试通过以下方式进行诊断

C++ 为什么在与 void 指针一起使用时 sprintf_s 格式会发生变化?

这是工作的原始代码://...unsigned__int64num=57;sprintf_s(buffer,sizeof(buffer),"%llu",num);但是,当我尝试将这部分提取到此函数中时:voidaddBuffered(void**attributeValue,char*format){sprintf_s(buffer,sizeof(buffer),format,*attributeValue);}通过调用:addBuffered((void**)&num,"%d");我必须将sprintf_s中的格式参数从%llu更改为%d以获得正确的值。有人可以解释为什么会发生这种情

c++ - 有没有更优雅的方式在 C++ 中结合 sprintf 和 std::string?

在我的C++代码中,我经常使用以下类型的辅助函数:staticinlinestd::stringstringf(constchar*fmt,...){std::stringret;//Dealwithvarargsva_listargs;va_start(args,fmt);//Resizeourstringbasedontheargumentsret.resize(vsnprintf(0,0,fmt,args));//Endthevarargsandrestartbecausevsnprintfmuckedupourargsva_end(args);va_start(args,fmt

c++ - sprintf 何时以及为何会失败?

我正在使用swprintf将字符串构建到缓冲区中(使用循环等)。constintMaxStringLengthPerCharacter=10+1;wchar_t*pTmp=pBuffer;for(size_ti=0;i=0);pTmp+=nWritten;}*pTaskPlayers='\0';如果在测试期间断言从未命中,我能否确定它永远不会在实时代码中命中?也就是说,我是否需要检查nWritten什么情况下可以返回-1?该文档或多或少只是说明“如果函数失败”。在一个地方,我读到如果它不能匹配参数(即可变参数的格式化字符串),它将失败,但我并不担心。在这种情况下,我也不担心缓冲区溢出-

c++ - uint_fast16_t 的 sprintf 格式?

我对uint_fast16_t的格式有疑问uint_fast16_trunningOrderNo;std::stringATNativeConnector::_GetNextClOrdId(){time_tt=time(NULL);structtm*tim=localtime(&t);std::stringstreamsstr;chartemp[10];sprintf(temp,"%02d%02d%02d%03u",tim->tm_hour,tim->tm_min,tim->tm_sec,++runningOrderNo);sstrtm_hourtm_mintm_sectm_sec我收

c# - 翻译 C+ +'s sprintf format string to C#' s string.Format

我找到了下面的C++代码(注释是我自己加的)://frame_nameisachararray//prefixisstd::string//kisaforloopcounter//framesisastd::vectorstringsprintf(frameName,"%s_%0*s.bmp",prefix.c_str(),k,frames[k].c_str());然后我尝试将它翻译成C#//prefixisstring//kisaforloopcounter//framesisListstringframeName=string.Format("{0}_(whatgoesinhere

c++ - 双值的 sprintf 格式化

我在UNIX中使用sprintf()将double值转换为字符串时遇到一个特定问题。例如我有两个值:doublea=0.009984354523452;doubleb=0.01;在转换时,我正在使用:sprintf(somestringvar,"Doublevalue:%.15f\n",a);sprintf(diffstringvar,"Doublevalue:%.15f\n",b);转换为字符串。我的问题是'a',值打印正确,但对于'b'的值,在尾端附加了0。请提供将“a”和“b”表示为精确值的任何常用方法。 最佳答案 打印b时得