草庐IT

c++ - const char* 的多重定义

我收到上述全局消息链接器错误constchar*HOST_NAME="127.0.0.1";我不认为我已经编译了一些文件两次,但无论如何这是我对文件的定义。main.cpp#include#include#include#include#include"connection.hpp"连接.cpp#include#include#include#include#include#include#include#include#include"connection.hpp"连接.hpp#ifndef__connection__#define__connection__#include#inc

c++ - 字符大小困惑

这个问题在这里已经有了答案:Willa`char`always-always-alwayshave8bits?(7个答案)关闭7年前。据我所知,1个字符=1个字节=8位(32位系统)。charc=0xffff0000;//wrong那么为什么char只允许8位并且文件中的每个字符也是8位长度。谢谢。

c++ - 在运行时调整 char[] 的大小

我需要在运行时将chararray[size]的大小调整为chararray[new_size]。我该怎么做? 最佳答案 如果您使用的是std::vector而不是数组,那么您想要的功能将只是该类型的另一种方法。 关于c++-在运行时调整char[]的大小,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1354900/

c++ - 奇怪的 char* 编译错误?

我下面的代码有什么问题吗?我得到了编译错误!typedefunsignedcharBYTE;voidfoo(char*&p){return;}intmain(){BYTE*buffer;//errorC2664:'foo':cannotconvertparameter1from'char*'to'char*&'foo((char*)buffer);return0;}提前致谢,乔治 最佳答案 当您将BYTE*转换为char*时,会创建类型为char*的未命名临时实体。您调用的函数引用了char*,但您不能引用这样的临时实体,因为它不是

c++ - 如何从路径中获取文件名的词干?

我想从constchar*文件路径中提取一个constchar*文件名。我尝试使用正则表达式但失败了:constchar*currentLoadedFile="D:\files\file.lua";charfileName[256];if(sscanf(currentLoadedFile,"%*[^\\]\\%[^.].lua",fileName)){return(constchar*)fileName;//WILLRETURN"D:\files\file!!}问题是将返回“D:\files\file”而不是想要的"file"(注意:没有“.lua”) 最佳

c++ - 为什么 char** 不能作为 C++ 中以下函数的返回类型?

我在C++中有以下函数:char**f(){char(*v)[10]=newchar[5][10];returnv;}VisualStudio2008说明如下:errorC2440:'return':cannotconvertfrom'char(*)[10]'to'char**'为了让这个函数起作用,返回类型到底应该是什么? 最佳答案 char**与char(*)[10]不是同一类型。这两种类型都是不兼容的类型,因此char(*)[10]不能隐式转换为char**。因此编译错误。函数的返回类型看起来很难看。你必须把它写成:char(

c++ - C++ 中的 const char*

C++中的字符串表达式是如何工作的?考虑:#includeusingnamespacestd;intmain(intargc,char*argv[]){constchar*tmp="hey";delete[]tmp;return0;}“嘿”表达式存储在哪里以及如何存储,为什么在我尝试删除它时出现段错误? 最佳答案 在这种(有些特殊的)情况下,它的存储位置留给编译器来决定。然而,这对您来说并不重要-如果您不使用new分配内存,则尝试使用delete释放它并不是一件好事。您不能删除以您分配的方式分配的内存。如果您想控制该资源的释放,您应

c++ - 从 char* 初始化 std::string 而不复制

我遇到这样一种情况,我需要处理大量(许多GB)数据:通过附加许多较小的(Cchar*)字符串构建一个大字符串修剪字符串将字符串转换为C++conststd::string进行处理(只读)重复每次迭代中的数据都是独立的。我的问题是,我想尽量减少(如果可能的话消除)堆分配的内存使用量,因为目前这是我最大的性能问题。有没有一种方法可以将C字符串(char*)转换为STLC++字符串(std::string)而无需std::string在内部分配/复制数据?或者,我可以使用stringstreams或类似的东西来重新使用大缓冲区吗?编辑:感谢您的回答,为了清楚起见,我认为修改后的问题是:如何有

c++ - 从 Boost::Tokenizer 中删除重复项?

我试图拆分一个逗号分隔的字符串,然后对每个标记执行一些操作,但忽略重复项,所以……。按照以下几行:intmain(int,char**){stringtext="token,teststring";char_separatorsep(",");tokenizer>tokens(text,sep);//removeduplicatesfromtokens?BOOST_FOREACH(conststring&t,tokens){cout有没有办法在boost::tokenizer上做到这一点?我知道我可以使用boost::split和std::unique解决这个问题,但想知道是否也有一种

c++ - 无法在 VS 14 CTP : conditional expression of type 'void' is illegal 中使用 auto 声明 lambda

使用VisualStudio2014CTP、C++(v140)编译器:autogp=[&](BYTE*buff){autogp1=[](char*bff,char**p1){*p1=strstr((char*)bff,"(");return(*p1);};};错误:conditionalexpressionoftype'void'isillegal(也许auto真的输入错误?)如果我将内部lambda声明为std::functiongp1然后就可以了是我做错了什么还是编译器错误? 最佳答案 我没有运行2014,但您可能需要指定内部l