草庐IT

c++ - std::hash 值在 char* 值上而不是在内存地址上?

如本link所述:ThereisnospecializationforCstrings.std::hashproducesahashofthevalueofthepointer(thememoryaddress),itdoesnotexaminethecontentsofanycharacterarray.这意味着使用相同的char*值,可以产生不同的哈希码。例如,有这样的代码://MOKandMOVaretemplateargumentsvoidemit(MOKkey,MOVvalue){autoh=hash()(key);cout这是通过调用4次emit()对相同的key(使用MO

c++ - 类型 "char *"的参数与类型 "LPWSTR"的参数不兼容

这可能以前有人问过,但我似乎找不到解决方案:std::stringGetPath(){charbuffer[MAX_PATH];::GetSystemDirectory(buffer,MAX_PATH);strcat(buffer,"\\version.dll");returnstd::string(buffer);}这会返回一个错误说明:argumentoftype"char*"isincompatiblewithparameteroftype"LPWSTR"是的。有人得到答案了吗? 最佳答案 你需要使用ansi版本:std::s

c++ - 如何创建一个具有 32 位 int 和四个 8 位 char 类型的 union ,每个 char 类型都引用 32 位 int 的不同切片?

我想创建一个最大成员是32位整数的union。主要写到这里。然后是四个8位变量,可能是char类型,每个变量将引用32位整数的不同部分,例如:union{int32myint;charchar1[7:0];charchar2[15:8];charchar3[23:16];charchar4[31:24];}但我不确定如何在C++中执行此操作。 最佳答案 这可能有效:union{int32myint;charchars[4];}; 关于c++-如何创建一个具有32位int和四个8位char

c++ - 为什么将字符串文字传递给 char* 参数有时只是编译器错误?

我在C和C++程序中工作。我们曾经在没有make-strings-writable选项的情况下进行编译。但那会收到一堆警告,所以我将其关闭。然后我收到一大堆错误,格式为“无法将constchar*转换为char*inargmuent3offunctionfoo”。所以,我经历了很多改变来解决这些问题。然而,今天,程序崩溃了,因为文字“”被传递到一个需要char*的函数中,并将第0个字符设置为0。它没有做任何坏事,只是试图编辑一个不断,崩溃。我的问题是,为什么这不是编译器错误?以防万一,这是在用gcc-4.0编译的mac上。编辑:添加代码:char*host=FindArgDefault

c++ - 直接写入 std::string 的 char* 缓冲区

所以我有一个std::string和一个接受char*并写入其中的函数。由于std::string::c_str()和std::string::data()返回constchar*,我不能使用它们。所以我正在分配一个临时缓冲区,用它调用一个函数并将它复制到std::string。现在我计划处理大量信息,复制此缓冲区会产生明显的影响,我想避免它。有些人建议使用&str.front()或&str[0]但它会调用未定义的行为吗? 最佳答案 C++98/03不可能。字符串可以在写入时复制,因此它需要处理所有读取和写入。C++11/14在[s

c++ - 在 C++ 中追加到 Char 数组的末尾

有没有可以将一个字符数组附加到另​​一个字符数组的命令?理论上会像这样工作的东西://array1hasalreadybeensetto"Thedogjumps"//array2hasalreadybeensetto"overthelog"append(array2,array1);cout我认为这是一个非常容易实现的功能,我只是很惊讶没有内置命令。*编辑我应该更清楚,我不是说改变数组的大小。如果array1设置为50个字符,但只使用了其中的10个,您仍然可以使用40个字符。我在想一个基本上可以做的自动命令://assumingarray1has10charactersbutwasde

c++ - 将 boost::array<char> 复制到 std::string

我正在尝试cvopyboost::array至std::string.boost::array_buffer;std::stringdata;std::copy(_buffer.begin(),_buffer.begin()+bytes_transferred,data.begin());这是行不通的。所以我稍微改变了一下。char_buffer[1024];std::stringdata;std::copy(_buffer,_buffer+bytes_transferred,data.begin());第二个也不起作用。 最佳答案

c++ - 方便地将 std::vector<unsigned char> 复制到输入流 (std::istream) 对象

我正在尝试使用第3方库中的函数,并需要一个输入流对象,其中传输二进制文件数据。签名看起来像这样:doSomething(conststd::string&...,conststd::string&...,std::istream&aData,conststd::string&...,conststd::map*...,long...,bool...);由于我无法更改/更改此第3方库/函数,因此我必须适应“我的”代码。在调用位置,我有一个std::vector,它包含预期在istream对象中传递的数据。目前,我通过迭代它并使用我强烈怀疑可能有更有效/更方便的方法,但到目前为止找不到任何

C++ 将 int 和 string 转换为 char*

这有点难,我想不通。我有一个int和一个字符串,我需要将其存储为char*,int必须是十六进制即inta=31;stringstr="anumber";我需要将两者用制表符分开放入一个char*中。输出应该是这样的:1Fanumber 最佳答案 适当包含:#include#include#include像这样:std::ostringstreamoss;oss从以下位置复制结果:oss.str().c_str()请注意c_str的结果是临时的(!)constchar*所以如果你的函数需要char*您将需要在某处分配一个可变拷贝。(

c++ - 与 const char * [] 声明关联的重复符号错误

我很乐意帮助诊断我在尝试使用g++4.2.1进行编译时收到的重复符号错误的来源。具体错误是ld:duplicatesymbol_SOCIODEM_FILENAMESin/var/folders/c+/c+eq1Qz1Feye7vxs5mQOUE+++TI/-Tmp-//ccP3yVgF.oand/var/folders/c+/c+eq1Qz1Feye7vxs5mQOUE+++TI/-Tmp-//cc1NqtRL.ocollect2:ldreturned1exitstatus仅当我将此声明包含在名为Parameters.h的文件中时才会发生错误://Parameters.h#ifndef