草庐IT

c++ - NULL 终止字符串及其长度

我有一个遗留代码,它接收一些专有代码,解析它并创建一堆静态字符数组(嵌入在表示消息的类中)来表示NULL字符串。然后指向字符串的指针被四处传递并最终序列化到某个缓冲区。分析表明str*()方法需要很多时间。因此我想使用memcpy()是否可能。为了实现它,我需要一种方法将长度与指向NULL终止字符串的指针相关联。我想:使用std::string看起来效率较低,因为它需要内存分配和线程同步。我可以使用std::pair.但在这种情况下,我需要“手动”保持长度。你怎么看? 最佳答案 使用std::string

c++ - 如何制作包含原始字符串终止符的 C++ 原始字符串?

我使用R"(...)"来定义一个原始字符串,但是,如果该字符串实际上包含一个原始字符串终止符)",编译器会报错。例如:autotag=R"("(add)")";//trytogetstring我怎样才能修改它以使其工作? 最佳答案 原始字符串文字的语法如下所示:R"(...)"括号旁边的可选分隔符正是出于您刚刚偶然发现的原因。这是为了让您在文字中包含原始字符串的控制字符。所以添加一个分隔符:autotag=R"tag("("add")")tag"; 关于c++-如何制作包含原始字符串终止

c++ - 空终止字符 (\0) 和 `^@` 之间的区别

我的代码是这样的:#includeusingstd::cout;usingstd::endl;intmain(intargc,char*argv[]){cout我希望在终端中看到这样的内容:$test-program0$然而,我看到的是这样的:$test-program0^@$让我感到困惑的是,我认为'\0'可以转换为0。而0也可以转换成\0。我希望看到一个空字符后跟一个endl,但结果很奇怪,比如^@。有人对此有想法吗? 最佳答案 ^@正是您的终端仿真器呈现'\0'的方式。 关于c++

c++ - 在 C 中复制字符串时为空终止字符分配空间?

constchar*src="你好";调用strlen(src);返回大小5...现在说我这样做:char*dest=newchar[strlen(src)];strcpy(dest,src);这似乎不应该起作用,但当我输出所有内容时它看起来是正确的。似乎我没有为最后的空终止符分配空间......这是对的吗?谢谢 最佳答案 您没有为终止符分配空间是正确的,但是不这样做并不一定会导致您的程序失败。您可能会覆盖堆上的以下信息,或者您的堆管理器会将分配大小四舍五入为16字节的倍数或类似的东西,因此您不一定会看到此错误的任何可见影响。如果您

c++ - 定义不带终止符的 C++ 字符数组

WhythisprogramcompilesfineinC¬inC++?的答案解释一下,与C语言不同,C++语言不允许char数组的初始化字符串长度不足以容纳终止空字符。有没有一种方法可以在C++中指定一个未终止的char数组,而不会在源代码中将字符串膨胀四倍?例如,在C和C++中,以下是等价的:constchars[]="HellofromStackOverflow";constchars[]={'H','e','l','l','o','','f','r','o','m','','S','t','a','c','k','','O','v','e','r','f','l','o'

c++ - 共享库中的内部异常终止最终用户应用程序

我正在构建一个内部使用Boost.thread的共享库。因此,Boost.system也被使用,因为Boost.thread依赖于它。我的共享库导出一个C接口(interface),所以我想对最终用户隐藏所有内部异常处理和线程使用等。可以这么说,它应该是一个黑匣子。但是,当我链接到客户端应用程序时,程序运行良好-一旦需要通过调用库函数来停止处理,我就会得到:在抛出“boost::thread_interrupted”实例后调用终止我在库内部捕获了这个异常,所以我不知道为什么它实际上没有被捕获。最终用户的程序无意以任何方式了解或处理Boost异常。在构建共享库时,我对Boost.thre

c++ - 访问冲突读取位置-未终止的字符串(不可读的内存)

我正在使用log4cplus库,但无法使日志记录正常工作。我使用这段代码:PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT("log.properties"));Loggerg_logger=Logger::getInstance(LOG4CPLUS_TEXT("mylogger"));LOG4CPLUS_WARN(g_logger,LOG4CPLUS_TEXT("testtesttest"));它在LOG4CPLUS_WARN处中断并出现错误:访问违规读取位置这是我的调用栈:msvcp110d.dll!std::basic_stream

c++ - Eclipse C++ MinGW - 无法启动程序<已终止>

我是Eclipse的新手。我使用EclipseIndigo和MinGW来编写C++程序。创建一个Helloword项目没问题,但我可以运行该程序。它在启动时已被终止!这是构建日志(Ctrl+B):"****构建项目Hl的配置调试********InternalBuilder用于构建****无需为Hl构建”这是按Ctrl+F11运行时得到的结果:“"谁能告诉我如何解决这个问题? 最佳答案 您需要确保将C:\MinGW\bin包含到路径环境中此外,请确保您不包含这样的路径->C:\MinGW\msys\1.0\bin如果这样做,构建的应

c# - 终止前清理?

这个问题困扰了我一段时间:我在MSDN的DirectX中阅读过article以下内容:Thedestructor(oftheapplication)shouldreleaseany(Direct2D)interfacesstored...DemoApp::~DemoApp(){SafeRelease(&m_pDirect2dFactory);SafeRelease(&m_pRenderTarget);SafeRelease(&m_pLightSlateGrayBrush);SafeRelease(&m_pCornflowerBlueBrush);}现在,如果应用程序的所有数据都在终止时

c++ - MFC 应用程序终止时运行自定义代码 : d'tor or WM_CLOSE?

我有一个基于对话框的MFC应用程序,它需要停止WindowsWifi服务才能正常运行,但我想在我的应用程序退出时再次启用它。所以我想我应该将重启服务的代码放在主对话框类的析构函数中。现在我注意到其他人将他们应该在程序终止期间运行的代码放入WM_CLOSE消息处理程序中。这两种方式似乎都有效,但我想知道这两种方式是否有缺点。 最佳答案 对于基于MFC对话框的应用程序,您可以将最终代码放置到应用程序类InitInstance方法中,紧接在主对话框DoModal调用之后。对于其他MFC应用程序类型(MDI、SDI),最终代码通常放在Exi