草庐IT

c++ - C/C++ : how to get integer unix timestamp of build time (not string)

我正在尝试实现非常微不足道的事情:我需要存储构建时间的整数32位unix时间戳,但是我找到的所有宏(__DATE__,__TIME__,__TIMESTAMP__)扩展为字符串,而不是整数。看来,我们只是没有它(这对我来说很奇怪)。我真的想要整数,而不是字符串。获得它的最佳做法是什么?更新:附带说明:我做嵌入式的东西,所以我没有足够的资源(比如128KB的闪存),因此解析字符串真的是个坏主意。我为什么需要它:我只需要每个Beta版本都有唯一的版本号。首先,hex文件将被命名为my-firmware-v2-33-BETA-1397315745.hex,其次,当我需要在设备屏幕上显示当前版

c++ - cplusplus.com 说 std::string "shall not be dereferenced"的结尾

如果你能为我澄清一些困惑,我会很高兴。我正在编写一个函数来删除字符串中的重复字符,例如"AB-->"AAABB"。voidremove_dups(std::string&str){std::string::iteratorit=str.begin();while(it!=str.end()){if(*(it+1)==*it){str.erase(it+1);}else{++it;}}}我测试的时候好像能用。但是,我想知道,不应该有栅栏柱问题吗?当“it”是字符串的末尾时,if语句查看不存在的下一个字符。根据cplusplus.com,尾后字符是一个理论字符,将跟在字符串中的最后一个字符

c++ - Clang:将 bind 或 mem_fn 与 string::c_str 和 transform 结合使用时出现问题

尝试将std::stringvector转换为constchar*vector:#include#include#include#includeintmain(intargc,char**argv){std::vectorvalues;values.push_back("test1");values.push_back("test2");values.push_back("test3");std::vectorc_values(values.size());std::transform(values.begin(),values.end(),c_values.begin(),std::

c++ - 带有 stringstreams 的 strdup 导致 valgrind 错误

我有以下问题:我正在编写一个必须环绕C库的C++程序,所以当我与库交互时,我总是必须使用char*而不是std::string用于所有操作。为了尽可能避免使用char*,我使用stringstreams进行格式化,例如:#include#include#include#includeusingnamespacestd;intmain(intargc,char**argv){ostringstreamstr;str就输出而言,程序正确输出“./test+hello”。但是,valgrind给了我很多类型的错误==30350==Invalidreadofsize1==30350==at0x

c++ - 为什么类持有可复制的引用?

有一个持有引用的类,我希望下面的代码会失败,但它可以编译:#includestructReferenceHolder{std::string&str;ReferenceHolder(std::string&str):str(str){}};//Whydoesthiscompile?ReferenceHolderf(){std::stringstr="Hello";returnReferenceHolder(str);}intmain(){ReferenceHolderh=f();std::cout编译器:g++4.7.2(带-std=c++11)编辑:即使使用-fno-elide-co

c++ - 为什么 stringstreams rdbuf() 和 str() 给我不同的输出?

我有这个代码,intmain(){std::stringst;std::stringstreamss;ssstr():"str();std::cout给我这个输出ss.rdbuf()->str():hejhejmeddigss.rdbuf():hejmeddig但这是为什么呢?是因为ostreams对operator 最佳答案 ss.rdbuf()->str();返回所有缓冲区内容的拷贝。在做什么std::cout?查看说明basic_ostream&operator*sb);它从缓冲区逐个字符地读取并将它们写入ostream,直到

c++ - 正常 block 后检测到堆损坏

我有以下代码,我不确定为什么当它命中Myclass的析构函数时我会收到堆损坏检测错误。我相信我正在正确地释放内存??#include#includeusingnamespacestd;classMyClass{private:char*mp_str;public:MyClass():mp_str(NULL){}~MyClass(){delete[]mp_str;}voidsetString(constchar*str);voidprintString();};intmain(){MyClass*a=newMyClass();std::vectormyVector;myVector.pu

c++ - 为什么在我向空字符串添加一个字符时返回一个未知值(如 ""+ c)?

请允许我先向您展示我的代码:voidtestStringAdd(){charc='$';stringstr="";str+=c;//thesameas`str=str+c;`cout我预计输出是:$---size:1$---size:1但是vs2013上的真实输出是:$---size:1---size:0这是一个有趣的现象,我想知道为什么会这么奇怪?注意:如果我编写stringstr="";则str==""将返回true。 最佳答案 在str=""+c;中,""不是std::string,它是一个stringliteral类型为co

c++ - C++ 字符串和 C 字符串 ( .c_str() ) 之间的区别

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicates:Whydoesstd::stringnotprovideaconversiontoconstchar*?Whydoesn'tstd::stringprovideimplicitconversiontochar*?case1:voidreadFile(conststring&inputfile){ifstreamin(inputfile);}case2:voidreadFile(conststring&inputfile){ifstreamin(inputfile.c_str());}当然,我知道如何调用if

c++ - 是否必须释放 std::string.c_str() 或 std::string.data() 返回的指针?

据我所知,当您调用c_str()/data()时,std::string会创建其内容的标识数组拷贝方法(有/没有终止NUL-char,在这里无关紧要)。不管怎样,对象是否也负责释放这个数组,还是我必须这样做?简而言之:std::stringhello("content");constchar*Ptr=hello.c_str();//useit....delete[]Ptr;////really???我只是想在内存分配方面保持安全。 最佳答案 不,您不需要释放ptr指针。ptr指向位于内部位置某处的不可修改字符串(实际上这是编译器的实