草庐IT

std_lib_facilities

全部标签

c++ - C 字符串和 std::string 之间的转换导致平台特定方式出现乱码

我今天正在处理一个特定于平台的错误,在这个错误中,在Windows机器上某个字符串会非常乱码,但在Mac上则不会。该错误与在std::string和constchar*之间进行显式和隐式转换的几行有关。基本上,我有一个带有签名的函数voidfoo(conststd::string&id);foo在某些时候打印字符串。在Windows上,如果像下面这样调用,它会打印带有不同程度损坏的id字符串(混淆前几个字符或整个字符串)std::stringmystring=bar();constchar*id=mystring.c_str();foo(id);//passtheCstylestrin

c++ - 涉及 `std::string` 的编译导致 Windows 错误状态

最小的例子:#include#includeintmain(int/*argc*/,char*/*argv*/[]){HANDLEhandle=GetStdHandle(STD_OUTPUT_HANDLE);//Behaviorthesame,withorwithout.DWORDerr=GetLastError();std::stringstr;return(int)err;//returns127ifflineaboveuncommented,0iffcommented}此程序返回127,对应于ERROR_PROC_NOT_FOUND(“找不到指定的过程。”)。请注意,err是在s

c++ - 使用 std::filesystem 输出作为 LPCWSTR

我正在制作一个程序,它递归地列出某个目录中的所有文件,并使用WinINet将每个文件分别上传到FTP服务器。我遇到的问题是在FtpPutFile()函数中使用filesystem::path::filename因为需要LPCWSTR。转换它(或以某种方式按原样使用它)的最好和最简单的方法是什么?std::stringpath="C:\\Programs";for(constauto&entry:std::experimental::filesystem::recursive_directory_iterator(path))FtpPutFile(hIConnect,entry.path

c++ - std::map::find(char*) 在 Debug模式下无法在 64 位机器上运行

我面临一个有趣的情况,想与大家分享。当然,如果有人能提供帮助,我将不胜感激!#include"stdafx.h"#include#defineDEF_NAME1"NAME1"#defineDEF_NAME2"NAME2"#defineDEF_NAME3"NAME3"#defineDEF_NAME4"NAME4"structTInfo{constchar*TName;constchar*TArray1[100];constchar*TArray2[100];};typedefstd::mapTInfoMap;typedefstd::pairTInfoPair;staticTInfoMap

c++ - 将一组函数同时编译成.LIB和.DLL

是否有任何预处理器技巧或可以同时编译一组函数的lib和dll版本的东西? 最佳答案 编译器不必知道您是在创建静态库还是动态库——它只创建目标文件。然后您可以获取这些目标文件并将它们传递给库管理器(创建静态库)或链接器(并创建共享对象/DLL),是的,您可以使用相同的目标文件来执行这两项操作,只要因为您使用链接器定义文件来控制DLL导出。使用VisualStudio的一种简便方法是建立一个依赖于静态库的DLL项目,然后选择"UseLibraryDependencyInputs"。该依赖项的选项,以确保包含所有全局对象,而不仅仅是那些在

c++ - 如何销毁由 std::thread 显式创建的线程?

我希望两个线程最初都在无限循环中运行,但过了一段时间我想杀死第一个线程而不等待它完成,第二个线程应该正常运行。我该如何实现?当我运行下面的代码时,出现调试错误!voidf1(inti){while(1){printf("ExecutngThread%d:%d\n",i,j);Sleep(10);}}intmain(){std::threadt1(f1,1);std::threadt2(f1,2);Sleep(100);t1.~thread();while(1){Sleep(10);}return0;} 最佳答案 程序按照设定的控制流

windows - 如果lib/ext中存在struts.jar 1.2.7,则不会出现Websphere管理控制台

我正在将应用程序迁移到WAS7.0(FixPack13)。应用程序使用了许多位于appserver\lib\ext目录中的jar。如果在调用was管理控制台时存在struts.jar(1.2.7),则会崩溃,并显示错误404屏幕(如下)。如果我从lib\ext中删除struts.jar,管理控制台就会工作,当然我的应用程序需要它。wasjarloader设置为parentfirst,myapp为parentlast。提前谢谢你的建议。错误屏幕和转储,注意登录屏幕显示正常,这是在单击“登录”之后:错误404处理请求时出错:%2IBM%2FConsole%2FIndex.do消息:org.

c++ - 为什么 std::ofstream 添加额外的#13(换行符)字符?

我正在使用一个基本的std::ofstream对象,创建如下:output_stream=std::ofstream(output_file.c_str());这会创建一个文件,其中包含一些信息。让我展示这样一条消息的示例:(Watch窗口摘录)full_Message"Errorwhileprocessingmessage:\r\n\tForecastRequest:"这一切都可以,但是在启动以下命令后,出现了问题:output_stream为了找出问题所在,让我们看一下文件的十六进制转储:(这是文件的十六进制显示,如Notepad++中所示。为清楚起见,我截取了屏幕截图。)如您所见

c++ - 为什么 std::remove for file 总是返回 -1?

我正在尝试删除一个文件(如果存在)。所以首先我测试文件是否存在,如果存在我使用std::remove删除它。.test.json中包含一些json相关的txt。我还有#include包括在内。std::stringfile_to_remove="test.json";std::ifstreamf(file_to_remove.c_str());if(f.good()){intval=std::remove(file_to_remove.c_str());std::cout我原以为retval是0但我得到-1我当前的输出是:Removingfile:test.json:retval:-1

c++ - 为什么 .o(目标文件)链接速度比 .lib(静态库)快?

在我的工作场所,我们的产品编译成可执行文件,子项目链接为静态库(.lib)或共享库(.dll)。我们使用MicrosoftC++编译器。最近,我的一位同事将一个子项目目标从.lib(静态库)转换为.o(目标文件),并且该子项目的链接时间急剧减少。早些时候,.lib链接需要大约1.5分钟。通过链接到.o,链接时间几乎为5-6秒。为什么链接.lib比链接.o慢? 最佳答案 如果您所做的只是编译源代码以创建目标文件,那么您根本就没有执行链接。这意味着任何对源代码中存在的外部函数和变量的引用都不会起作用,因为它们的地址尚未解析。https: