草庐IT

heap_string_malloc

全部标签

c++ - 使用 std::string 在 switch-case block 中返回字符串常量

注意:这不是关于使用字符串来选择switch-caseblock中的执行路径。C++中的一个常见模式是使用switch-caseblock将整数常量转换为字符串。这看起来像:charconst*to_string(codescode){switch(code){casecodes::foo:return"foo";casecodes::bar:return"bar";}}但是,我们是在C++中,所以使用std::string更合适:std::stringto_string(codescode){switch(code){casecodes::foo:return"foo";caseco

c++ - std::string 删除最后一个字符失败?

我正在尝试将通配符形式的用户输入("*word*")更改为正则表达式格式。为此,我使用下面的代码去除输入开头和结尾的'*',以便我可以在两端添加正则表达式字符:string::iteratoriter_begin=expressionBuilder.begin();string::iteratoriter_end=expressionBuilder.end();iter_end--;if((char)*iter_begin=='*'&&(char)*iter_end=='*'){expressionBuilder.erase(iter_begin);expressionBuilder.

c++ - 对于 malloc() 失败是否有等效的 set_new_handler()?

在C++中,你can安排一个函数在new失败时调用。有没有办法在malloc失败时调用一个函数?假设正在从我不想更改的第三方库调用malloc。我认为没有可移植的答案,所以我很乐意接受特定于平台的答案。我在某些平台上使用Linux+uclibc,在其他平台上使用Linux+glibc。我打算使用setrlimit限制malloc可以返回的内存量。 最佳答案 malloc如果失败则返回NULL。您应该处理它,以及CRT内存函数的其他故障(realloc尤其容易出错)。在一般情况下,我认为您必须将内存的所有CRT使用包装在您自己设计的函

c++ - istream 中的 getline 和 basic_string 中的 getline

stringtext;getline(text.c_str(),256);1)我收到错误消息“错误:没有匹配函数来调用‘getline(constchar*,int)”上面有什么问题,因为text.c_str()也返回一个指向字符数组的指针。如果我这样写chartext[256]cin.getline(text,256,'\n');它工作正常。cin.getline和getline有什么区别?2)怎么会textstring;getline(cin,text,'\n')接受整行作为输入。这个字符数组的指针在哪里? 最佳答案 text.

c++ - std::string.npos 有效性

std::string.npos曾经有效吗?(与正确的std::string::npos相反。)我在我正在处理的一个旧项目中经常看到它,它不能用VS2010编译。它是前标准时代的东西吗? 最佳答案 用于命名类成员的带有类语法的C实际上是一个点:classX{public:voidf();};voidX.f()//adot!seeD&E2.3{}然而,::语法还没有被发明出来。std命名空间也不存在。因此,std::string.npos从未像Cwithclasses或标准C++那样有效。我怀疑std::string.npos纯粹是微

c++ - 从 C++ 调用 NSLog : "Format string is not a string literal (potentially insecure)"

当我从C++调用NSLog时,Xcode提示传递给NSLog的格式字符串不是文字字符串。这是触发警告的一行代码:NSLog(CFSTR("Leaking?"));我不知道有什么方法可以在C++中编写NSString文字,而且我没有看到可以在项目设置中关闭的相关警告。有没有办法在不触发此消息的情况下从C++调用NSLog?我正在使用Xcode4.2.1。编辑:这确实是C++代码。我通常避免使用Objective-C++,坚持使用Objective-C或普通的旧C++,因为没有官方文档说明什么在Objective-C++中有效,什么无效。我只发现模糊的警告(例如)STL的某些部分可能存在问

C++ - MPIR:mpz_t 到 std::string?

我们如何将mpz_t转换为std::string?mpz_tVar;//Var=5000mpz_init_set_ui(Var,5000);std::stringStr="";//ConvertVartostd::string?mpz_clear(Var); 最佳答案 您正在寻找mpz_get_str:char*tmp=mpz_get_str(NULL,10,Var);std::stringStr=tmp;//Inordertofreethememoryweneedtogettherightfreefunction:void(*fr

c++ - C++ : why does free not accept a const void*, 中的 malloc/free 有更好的方法吗?

这个问题在这里已经有了答案:UnabletofreeconstpointersinC(12个答案)关闭8年前。将C++11代码连接到某些C回调,我必须传递constchar*const*,即字符串数组。这是我的代码的简化版本:intmain(int,char**){constintcnt=10;constchar*const*names=static_cast(malloc(sizeof(char*)*cnt));//...allocatingnames[0],etc.comingsoon...the_c_function(names);free(names);return0;}所以我

c++ - `std::string::begin()`/`std::string::end()` 迭代器失效?

#include#includeintmain(){std::strings="abcdef";std::strings2=s;autobegin=const_cast(s2).begin();autoend=s2.end();std::cout此代码将begin()const的结果与end()的结果混合在一起。这些函数都不允许使任何迭代器失效。但是我很好奇end()不使迭代器变量begin无效的要求是否实际上意味着变量begin可用于结束。考虑一个C++98,std::string的写时复制实现;非常量begin()和end()函数导致复制内部缓冲区,因为这些函数的结果可用于修改字符

c++ - std::string 停止在\0

我在使用std::string时遇到问题..问题是'\0'被识别为字符串的结尾,就像在类C的字符串中一样。例如下面的代码:#include#includeintmain(){std::strings("String!\0Thisisastringtoo!");std::cout输出这个:7String!这里有什么问题?std::string不应该像对待任何其他字符一样对待'\0'吗? 最佳答案 想一想:如果给定constchar*,您将如何确定哪里是真正的终止0,哪里是嵌入的0?您需要明确传递字符串的大小,或者从两个迭代器(指针?)