jjzjj

c++ - 一个 gcc 编译错误(关于复制 c'tors)这看起来很奇怪(至少对我来说)

因此,我有以下代码无法在OSX上的gcc4.2.1上编译。我得到的错误是:testref.cpp:Infunction‘intmain()’:testref.cpp:10:error:‘A::A(constA&)’isprivatetestref.cpp:20:error:withinthiscontext这是代码#includeclassA{public:A(){i=0;printf("Actor\n");}~A(){printf("Adtor\n");}private:A(constA&other){i=other.i;printf("ACOPYCTOR\n");}A&operat

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++ - gdb/lldb 调用一个函数并在其中中断

我在一个长期运行的程序中有一个全局函数:inttest(){inta=12;intc=10;printf("a=%d",a);a+=c;printf("a=%d",a);returna;}我调试程序并中断,然后发出以下命令:(lldb)calltest()a=12a=22(int)$0=22(lldb)我希望它在我点击calltest()之后每一行都在test()方法中中断,而不是立即返回结果。任何人都知道该怎么做?------------------------------------下面回答------------------------------------@JasonMole

c++ - 列出所有打开 AL 的设备不起作用

我找到了一些声称使用openAL列出所有音频输出设备的示例,但是我只能让它们列出当前在OSX(Yosemite、Maverick)上选择的设备。我使用的是mac,有默认声卡(内置输出)以及airplay设备和一些音花设备。(注意:在Windows上它会列出所有设备)我期望s=(char*)alcGetString(NULL,ALC_ALL_DEVICES_SPECIFIER);至少列出默认卡和音花设备。它什么都不返回。s=(char*)alcGetString(NULL,ALC_DEVICE_SPECIFIER);返回当前选择的设备。也许设备是虚拟的存在一些问题?但是,首先从mac设置

c - 使用 strtod strtof atof printf 进行语言环境不变的字符串处理?

是否有任何计划添加在当前语言环境下不变的C标准库字符串处理函数版本?目前有很多脆弱的解决方法,例如,来自jansson/strconv.c:staticvoidto_locale(strbuffer_t*strbuffer){constchar*point;char*pos;point=localeconv()->decimal_point;if(*point=='.'){/*Noconversionneeded*/return;}pos=strchr(strbuffer->value,'.');if(pos)*pos=*point;}staticvoidfrom_locale(cha

c++ - %ld 格式转换以实现便携性

在添加对Linux64的支持之前,这很容易。几乎所有数据都被声明为int或来自BYTE、WORD和DWORD的类型定义:typedefunsignedcharBYTE;typedefunsignedshortWORD;typedefunsignedlongDWORD;添加64位gcc支持后,DWORD需要稍微调整以保持32位值,因为它代表存储的数据://tocompileDWORDsas32bitson64-bitmachines:#if__x86_64__typedefunsignedintDWORD;#elsetypedefunsignedlongDWORD;#endif这在所有环

c++ - 如果 printf ("%c%c",'A' ,8);删除A,为什么不能printf ("%c%c",'\n' ,8);删除新行?我该怎么做?

如何在C代码中删除换行符?我想写一堆行并删除它们,然后在暂停后打印一些其他行然后删除它们......在一个循环中。就像无需滚动的实时更新。我可以打印字符并通过打印退格字符删除它们,但是一旦我打印新行,我就无法删除创建的行。有什么办法可以实现吗? 最佳答案 退格字符'\b'(ASCII8)移动到行内的上一个位置。如果您在xterm或vt100下兼容,您可以使用consolecodes:#include#include/*forsleep()*/intmain(void){printf("Line\n");sleep(2);printf

c++ - 如何在 Linux 上获得等效的 printf_l?

此函数存在于OSX上,允许您将自定义本地传递给该函数。setlocale不是线程安全的,将语言环境作为参数传递是线程安全的。如果没有等效项,任何与区域设置无关的printf或仅用于double(%g)的printf都可以。 最佳答案 你可以试试uselocale,它在调用printf之前设置线程区域设置(而不是进程区域设置)。 关于c++-如何在Linux上获得等效的printf_l?,我们在StackOverflow上找到一个类似的问题: https://s

c++ - 使用 C++ 字符串函数自动替换 s​​printf 函数

我们有大量使用sprintf和cstrings构造文件名的“演示”代码。我想用C++字符串替换它以允许非常长的文件名,因为它提供了更清晰的语法。所以本质上我们需要像这样转换blockofstreamsome_file;charfilename[100];sprintf(filename,"%s/soln%i.dat",a.c_str(),b);some_file.open(filename);变成类似的东西ofstreamsome_file((a+"soln"+to_string(b)+".dat").c_str());然而,因为它用在很多地方,所以我想使用某种自动转换(即sed表达式