草庐IT

c++ - 从 char* move std::string 的构造函数

我有一个函数f返回一个char*。函数文档说:Theusermustdeletereturnedstring我想从中构造一个std::string。要做的琐碎的事情是:char*cstring=f();std::strings(cstring);deletecstring;是否可以使用C++功能做得更好?我想写类似的东西std::string(cstring)避免泄漏。 最佳答案 std::string将制作一个空终止字符串参数的拷贝并管理该拷贝。没有办法让它拥有您传递给它的字符串的所有权。所以你所做的是正确的,我建议的唯一改进是检

c++ - char 和 char*(指针)

我想了解指针是如何工作的,所以我创建了这个小程序。首先我创建一个p指针,它指向一个char。第一个问题就到这里了。如果我创建一个指针,它的值是一个内存地址(如果我将它指向一个非指针对象),但这次在我的例子中它是“哈哈”。为什么它在char*中以这种方式工作?以及如何使用cin>>p为其增加值(value)?我的第二个问题是,我创建了一个q字符,它在我创建它时具有*p指针的值。但是它的值和地址也是“h”,但为什么呢?一定是这个char对象的内存地址!这是毫无意义的:D(mingw-gcc)#includeintmain(){/*char*p;cin>>p;//forexample:hah

c++ - 在 std::map 中使用 char* 作为键,它是如何工作的

这个问题直接关系到usingcharasakeyinstdmap.我了解传入的比较函数的作用以及为什么char*类型需要它作为键。但是,我不确定更新的实际工作方式。我很好奇您更新key的情况。std::map如何知道如何比较constchar*之间的相等性,cmp_str只告诉map插入键的顺序那个树。我已经深入研究了STL_tree.h代码(pulledfromhere),但没有找到太多。我唯一的猜测是它在进行直接内存比较。我对底层STL_tree类如何处理这种情况很感兴趣,或者如果它不能始终正确处理,会出现什么边缘情况?代码#include#include#includestruc

c++ - 全局 const char* 上的错误 LNK1169

我在使用VisualStudio2010和C++时遇到了一些奇怪的行为。我有一个头文件,我在其中声明了一些全局常量#ifndefCONSTANTS_H#defineCONSTANTS_H#defineWIN32_LEAN_AND_MEAN//Macros...#defineSAFE_RELEASE(ptr){if(ptr){ptr->Release();ptr=NULL}}#defineSAFE_DELETE(ptr){if(ptr){deleteptr;ptr=NULL;}}//Constants...constchar*CLASS_NAME="WinMain";constcharG

c++ - Valgrind 错误 : in use at exit: 72, 704 字节 C++ 初始化列表异常与 char*

问题:我有一个我没想到的奇怪问题。我有一个名为答案的类(class)在标题中是这样的:classAnswer{char*aText;boolb_correct;public:Answer():aText(0){;}//defaultconstructor}主要(测试)驱动程序代码是这样的:intmain(void){staticconstunsignedintMAX_ANSWERS=5;Answeranswers[MAX_ANSWERS];}我得到的(意想不到的)怪事是发生了一个分配,而且我还没有在我的代码中的任何地方使用一个新的。我猜char*正在初始化列表中调用它。我正在使用val

c++ - 错误 : Assigning to char* from incompatible type void*

所以我试图将来自libcURLHTTP请求的响应存储到C字符串中,以便稍后解析。响应代码完全是用C编写的,而其他所有内容都是用C++编写的,对于任何其他C++编译器,它应该可以正常工作。但是当我尝试编译时,即使我在文件名后跟“-xc”参数,我也会得到这些特定的响应。g++main.cpp-xccJSON.c-xcrespbuffer.c-lcurl-lm./respbuffer.c:14:9:error:assigningto'char*'fromincompatibletype'void*'s->ptr=malloc(s->len+1);^~~~~~~~~~~~~~~~~./resp

c++ - 从内部使用静态 std::string 的函数返回 const char * 是否安全?

我正在查看以下代码(简化)并问自己使用此returnMsg函数有多安全:#includeusingnamespacestd;constchar*returnMsg(constchar*msg){staticstd::stringmessage;message=msg;returnmessage.c_str();}intmain(intargc,char*argv[]){constchar*msg1=returnMsg("Helloworld");printf("msg1=%p\n",msg1);cout输出是:msg1=0x23a6028Helloworldmsg2=0x23a6028

c++ - 将 char 数组转换为对象指针 - 这是 UB 吗?

我最近看到一个类似这样的类,它用于“按需”构造对象,而不必出于各种原因使用动态内存分配。#includetemplateclassStaticObject{public:StaticObject():constructed_(false){}~StaticObject(){if(constructed_)((T*)object_)->~T();}voidconstruct(){assert(!constructed_);new((T*)object_)T;constructed_=true;}T&operator*(){assert(constructed_);return*((T*)

c++ - 为什么 unsigned char << unsigned char 的结果不是 unsigned char

我从左移得到的结果我找不到解释。unsignedcharvalue=0xff;//11111111unsignedchar=0x01;//00000001std::cout我原以为结果是11111110但我得到的是int(?),值为111111110。如何将unsignedchar的位向左移动,以便截断位,结果为11111110?我想做的是读取一系列字节并将它们解释为不同长度(1-32位)的整数。F0F51111000011110101可能是0F(first4bits)0F(next8bits)05(last4bits)这与不对小于int的类型进行算术运算有关吗?

c++ - 我可以从它包含的数据中分离一个 std::vector<char> 吗?

我正在使用一个函数生成一些数据作为std::vector和另一个处理数据并接受constchar*,size_tlen的函数(想想遗留API).有什么方法可以从vector中分离数据,以便vector可以在调用处理函数之前超出范围without复制vector中包含的数据(这就是我用分离)。一些代码草图来说明场景://Generatesdatastd::vectorgenerateSomeData();//LegacyAPIfunctionwhichconsumesdatavoidprocessData(constchar*buf,size_tlen);voidf(){char*buf