草庐IT

CHAR_LENGTH

全部标签

c++ - delete [] char *,内存问题

我有一个全局指针变量char*pointer=newchar[500];/*someoperations...*/有一个单独的FreeGlobal()函数可以释放指针,如下所示:delete[]pointer;第一次调用函数时,它实际上释放了内存,现在指针是一个坏指针。但是当我们多次调用它时,它会抛出异常。有没有办法在再次调用delete[]之前检查指针变量?解决方法是什么?这是一种不好的做法吗?谢谢。 最佳答案 删除后将指针设置为空。您不应多次尝试删除相同的数据。正如GRB在这篇文章的评论中提到的,调用delete[]NULL是绝

c++ - char[] 到十六进制字符串练习

下面是我当前的char*到十六进制字符串函数。我把它写成位操作练习。在AMDAthlonMP2800+上十六进制化一个1000万字节的数组需要大约7毫秒。我缺少任何技巧或其他方法吗?我怎样才能让它更快?在g++中使用-O3编译staticconstchar_hex2asciiU_value[256][2]={{'0','0'},{'0','1'},/*snip...,*/{'F','E'},{'F','F'}};std::stringchar_to_hex(constunsignedchar*_pArray,unsignedint_len){std::stringstr;str.res

c++ - vector<char> 到字符串段错误

试图从一个vector中初始化一个字符串。我应该得到“嘿”作为输出。但我得到了“段错误”。我做错了什么?//writeaprogramthatinitializesastringfromavector#include#include#includeusingnamespacestd;intmain(){vectorcvec;cvec[0]='h';cvec[1]='e';cvec[2]='y';strings(cvec.begin(),cvec.end());cout 最佳答案 vector类开始时的大小为零(默认情况下)。所以这样

c++ - 如何在 C++ 中删除 char *?

在我的应用程序中,我创建了一个char*,如下所示:classsample{public:char*thread;};sample::sample(){thread=newchar[10];}sample::~sample(){delete[]thread;}我在代码中做的事情是否正确? 最佳答案 如果您在new之后有[],则在delete之后需要[]。您的代码看起来正确。 关于c++-如何在C++中删除char*?,我们在StackOverflow上找到一个类似的问题:

c++ - 将非空终止的 char* 转换为 int

我正在编写一些读取数据文件的代码。该文件经常包含以ASCII编码的各种长度的数值,我需要将其转换为整数。问题是它们不是空终止的,这当然会导致atoi出现问题。我一直使用的解决方案是在字符序列中手动附加一个null,然后进行转换。这是我一直在使用的代码;它工作正常,但看起来很笨拙。char*append_null(constchar*chars,constintsize){char*tmp=newchar[size+2];memcpy(tmp,chars,size);tmp[size+1]='\0';returntmp;}intatoi2(constchar*chars,constint

c++ - 无法将 ‘std::string’ 转换为‘const char*

嗨,有人能告诉我这段代码有什么问题吗?strings=getString();//returnstringif(!strcmp(s,"STRING")){//Dosomething}编译时出现如下错误error:cannotconvert‘std::string’to‘constchar*’forargument‘1’to‘intstrcmp(constchar*,constchar*)’| 最佳答案 strcmp接受constchar*作为参数。您可以使用c_str方法:if(!strcmp(s.c_str(),"STRING")

c++ - 获取 char* 缓冲区中的第一个字节

我有一个char*缓冲区,我有兴趣查看char*缓冲区中的第一个字节,什么是解决此问题的最佳方法。编辑:基于反对票我可能想解释为什么这个问题,我知道方法但是在代码库中我一直在寻找获得第一个字节的人做各种疯狂的事情就像做一个拷贝缓冲区,将其复制到流中,然后进行获取。 最佳答案 就用charfirstByte=buffer[0]; 关于c++-获取char*缓冲区中的第一个字节,我们在StackOverflow上找到一个类似的问题: https://stackov

c++ - 如何在 C++20 中安全地将 const char* 转换为 const char8_t*?

来自thisanswer我了解到,在C++17中,我们可以通过std::filesystem::u8path使用UTF-8路径打开std::fstream。但在C++20中,这个函数已被弃用,我们应该将constchar8_t*传递给std::filesystem::path构造函数。问题来了:虽然我们可以合法地转换(通过reinterpret_cast)任何指向constchar*的指针,但我们不能反向操作:fromconstchar*到例如constchar8_t*(它会打破严格的别名规则)。因此,如果我们有一些外部API返回文件名的基于char的UTF-8表示(例如,来自用C编写

c++ - 对 `boost::log_mt_posix::basic_attribute_set<char>::~basic_attribute_set()' 的 undefined reference

新手问题...我是第一次试用Boost,因为我想试驾BoostLog图书馆。我构建了这个测试程序...#include#includeintfibonacci(intnum){inti;inta=1;intb=1;for(i=2;i编译数据:****BuildofconfigurationDebugforprojectLoggingCpp****makeallBuildingfile:../main.cppInvoking:GCCC++Compilerg++-O0-g3-Wall-c-fmessage-length=0-lpthread-MMD-MP-MF"main.d"-MT"mai

c++ - 你能对指向另一个对象的 char* 进行算术运算吗

这个问题在这里已经有了答案:Isaddingtoa"char*"pointerUB,whenitdoesn'tactuallypointtoachararray?(5个答案)关闭4年前。这是读取普通可复制对象字节的常用方法Objectobj;autop=reinterpret_cast(&obj);for(size_ti=0;i问题不在于严格别名,char*可以为任何东西起别名。问题出在[expr.add]的这段话中Whenanexpressionthathasintegraltypeisaddedtoorsubtractedfromapointer,theresulthasthety