草庐IT

c++ - 获取 char 数组的一部分

我觉得这是一个非常愚蠢的问题,但我似乎无法在任何地方找到答案!是否可以从一个字符数组中获取一组字符?抛出一些伪代码:chararry[20]="helloworld!";charpart[10]=arry[0-4];printf(part);输出:hello那么,我可以从这样的数组中获取一段字符,而无需循环并逐个字符地获取它们或转换为字符串,以便我可以使用substr()吗? 最佳答案 您可以使用memcpy(或strncpy)获取子字符串:memcpy(part,arry+5/*Offset*/,3/*Length*/);part

C++ offsetof char* 算法

在thisanswer,int8_t*用于(字节)指针运算:std::size_toffset=offsetof(Thing,b);Thing*thing=reinterpret_cast(reinterpret_cast(ptr)-offset);我过去一直使用char*但评论真的很困惑,没有人回应,所以我发布了这个单独的问题。char*是否有效,以及进行这些计算的首选方式? 最佳答案 您必须使用char*:在指针上使用reinterpret_cast和int8_t*时的行为不是int8_t的东西是undefined。转换为cha

c++ - 基于通用 char[] 的存储并避免与严格别名相关的 UB

我正在尝试构建一个类模板,该模板将一堆类型打包在一个适当大的char数组中,并允许将数据作为单独正确键入的引用进行访问。现在,根据标准,这可能会导致违反严格别名,从而导致未定义的行为,因为我们正在通过与其不兼容的对象访问char[]数据。具体来说,标准规定:Ifaprogramattemptstoaccessthestoredvalueofanobjectthroughaglvalueofotherthanoneofthefollowingtypesthebehaviorisundefined:thedynamictypeoftheobject,acv-qualifiedversion

c++ - operator[](const char *) 歧义

下面的代码#includestructFoo{operatordouble(){return1;}intoperator[](std::stringx){return1;}};intmain(){Foo()["abcd"];}使用g++编译良好,但使用clang和intel编译器编译失败,因为声明的方法和native运算符[]之间存在歧义。如果Foo隐式转换为int,我会很清楚,但这里转换为double。这不是解决了歧义吗? 最佳答案 §13.3.3.1.2[over.ics.user]/p1-2:Auser-definedconv

c++ - 根据 C++ 标准, `char* p=0; std::equal(p,p,p)` 是否定义明确?

根据C++标准,下面的定义是否明确?char*p=0;std::equal(p,p,p);问题真的是这样的:标准是否要求std::equal(begin1,end1,begin2)的实现方式是如果begin1==end1,则begin1和begin2可以是任何指针,甚至是不指向有效内存对象的指针?我认为这是标准的意图,但我没能找到明确说明这一点的声明。我担心这一点的原因是,VisualStudio显然会尝试检查begin2的“有效性”,即使begin1==end1也是如此。这与我对标准要求的理解相矛盾。编辑:这是我认为违反标准的VS2012代码:templateinlinebooleq

c++ - 为什么以及何时需要转换为 char volatile&?

在boost::detail::addressof_impl::f()在classT重载operator&()的情况下,执行一系列reinterpret_cast以获得对象的实际地址:templatestructaddressof_impl{staticinlineT*f(T&v,long){returnreinterpret_cast(&const_cast(reinterpret_cast(v)));}}转换为constvolatilechar&而不仅仅是转换为char&的目的是什么? 最佳答案 如果T具有const或volat

c++ - constexpr 连接两个或多个 char 字符串

我正在尝试创建一个constexpr函数,该函数将连接任意数量的char数组,方法是根据Xeo的以下答案进行操作,该答案连接两个char数组。https://stackoverflow.com/a/13294458/1128289#includetemplatestructseq{};templatestructgen_seq:gen_seq{};templatestructgen_seq:seq{};templateconstexprstd::arrayconcat(charconst(&a1)[N1],charconst(&a2)[N2],seq,seq){return{{a1[I

c++ - 如何在 C++ 中将 unsigned char[] 打印为 HEX?

我想打印以下散列数据。我应该怎么做?unsignedcharhashedChars[32];SHA256((constunsignedchar*)data.c_str(),data.length(),hashedChars);printf("hashedChars:%X\n",hashedChars);//doesn'tseemtowork?? 最佳答案 十六进制格式说明符需要一个整数值,但您提供的是char数组。您需要做的是将char值单独打印为十六进制值。printf("hashedChars:");for(inti=0;i由于

c++ - `char16_t` 和 `char32_t` 是用词不当吗?

注意:我敢肯定有人会说这是主观的,但我认为它是相当有形的。C++11给了我们新的basic_string类型std::u16string和std::u32string,为std::basic_string输入别名和std::basic_string,分别。子串的使用"u16"和"u32"在这种情况下对我来说更像是暗示“UTF-16”和“UTF-32”,这很愚蠢,因为C++当然没有文本编码的概念。名称实际上反射(reflect)了字符类型char16_t和char32_t,但这些似乎命名不当。它们是无符号的,因为它们的基础类型是无符号的:[C++11:3.9.1/5]:[..]Types

c++ - char 数组的 cin 和 cin.get() 之间的区别

我有这两个代码:chara[256];cin>>a;cout和chara[256];cin.get(a,256);cin.get();cout也许,相对于没有cin.get()的第二个;chara[256];cin.get(a,256);cout我的问题是(第一个):对于字符数组,我应该使用什么?cin或cin.get()?为什么我应该使用cin.get();我的char初始化后没有参数?我的第二个问题是:我的C++老师教我每次使用cin.get()进行初始化字符,并在每次初始化char数组或int数组或只是int或其他任何东西之后,再次将cin.get();在它之后。这就是我最初想问