草庐IT

c++ - 如何创建 const char* 的静态 const 数组

我尝试了以下行:staticconstconstchar*values[];但我在VC++警告C4114上收到以下警告:sametypequalifierusedmorethanonce.什么是正确的声明?目标是创建一个不可变的C字符串数组。 最佳答案 您编写了constconst而不是staticconstchar*constvalues[];(您将指针和基础值定义为const)另外,你需要初始化它:staticconstchar*constvalues[]={"字符串一","字符串二"};

c++ - const char * 上的析构函数

在我的程序中,我有这样一行:constchar*str=getStr();我是否需要在函数末尾调用str[]上的析构函数以防止内存泄漏? 最佳答案 问题没有包含足够的信息来告诉你,这取决于getStr()做了什么。例如:constchar*getStr(){return"boo";}那么你不能调用delete。constchar*getStr(){returnnewchar;}那么您应该调用deletestr;以避免内存泄漏(并且不得调用delete[])。constchar*getStr(){returnnewchar[10];}

C++ std::string 和 NULL const char*

我正在使用C++编写两段大代码,一段以“C风格”完成,另一段以“C++风格”完成。C类型代码具有返回constchar*的函数,而C++代码在很多地方都有类似constchar*somecstylefunction();...std::stringimacppstring=somecstylefunction();它从C样式代码返回的constchar*构造字符串。这一直有效,直到C风格代码发生变化并开始有时返回NULL指针。这当然会导致段错误。周围有很多代码,所以我想以最简洁的方式解决这个问题。在这种情况下,预期的行为是imacppstring将是空字符串。是否有一个很好的、巧妙的解

c++ - 在 C++ 中比较 char 数组的值

我在程序中做某事时遇到问题。我有一个保存人名的char[28]数组。我还有另一个char[28]数组,它也保留名称。我要求用户为第一个数组输入名称,第二个数组从二进制文件中读取名称。然后我将它们与==运算符进行比较,但即使名称相同,在调试时它们的值看起来也不同。为什么会这样?我如何比较这两者?我的示例代码如下:intmain(){charsName[28];cin>>sName;//Getthenameofthestudenttobesearched///Readingthetablesifstreamin("students.bin",ios::in|ios::binary);stu

c++ - 为什么不能将 TCHAR* 转换为 char*

错误C2664:“strcpy”:无法将参数1从“TCHAR*”转换为“char*”代码:LPCTSTRname,DWORDvaluestrcpy(&this->valueName[0],name);错误C2664:“strlen”:无法将参数1从“LPCTSTR”转换为“constchar*”LPCTSTRname;strlen(name)上面的代码在另一个项目中工作正常,我找不到它在这个MSVS2010项目中不起作用的原因。 最佳答案 您需要使用类似wcstombs的函数定义_UNICODE时。或者只是使用_tcslen(在Ge

c++ - 从 "const char*"到 "char"错误的无效转换

这个问题在这里已经有了答案:invalidconversionfrom‘constchar*’to‘char’(2个答案)关闭5年前。我想发布这个是因为我不太确定我在使用简单的赋值语句时遇到了什么问题。我正在做一个家庭作业,要求我在一个简单的程序中编写结构和函数来绘制ASCII字符的形状。现在我只是想测试我编写的函数,我正在尝试为Circle结构的符号元素赋值,只是为了测试我编写的DrawShape函数。当我尝试为其分配一个*字符时,我收到一条错误消息,指出“错误:从‘constchar*’到‘char’的无效转换”。我会把整个代码放进去,虽然它很长而且还没有完成。对此有任何帮助,我们

c++ - const char* 初始化

这是我在一个开源软件中找到的一种用法,我不太明白它是如何工作的。当我将它输出到标准输出时,它是“版本0.8.0”。constcharversion[]="version""0"".""8"".""0"; 最佳答案 这称为字符串连接——当您在源代码中将两个(或更多)带引号的字符串彼此相邻放置且它们之间没有任何内容时,编译器会将它们放在一起成为一个字符串。这最常用于长字符串——任何超过一行的字符串:charwhatever[]="thisisthefirstlineofthestring\n""thisisthesecondlineof

c++ - 将 QString 转换为 char * 的简洁方法(不是 const char* !!!!)

我有一个丑陋的代码来处理这些东西(创建一个c字符指针并在其中复制QString)但也许......以一种优雅的方式存在于QT中......实际代码:QStringmaquinaisamethodparameter.char*c_maquina=newchar[maquina.length()+1];strcpy(c_maquina,maquina.toStdString().c_str());仅供引用,我需要一个REALchar*而不是简单的constchar*所以这段代码不起作用:idMaquina.toLatin1().data();我不能使用http://developer.qt

c++ - 为什么C/C++会自动将char/wchar_t/short/bool/enum类型转换为int?

因此,如果我理解得很好,积分提升提供了:char、wchar_t、bool、enum、short类型总是转换为int(或无符号整数)。然后,如果表达式中有不同的类型,将应用进一步的转换。我理解得很好吗?如果是,那么我的问题是:它为什么好?为什么?不要成为不必要的char/wchar_t/bool/enum/short吗?我的意思是例如:charc1;charc2;c1=c2;正如我之前所描述的,char总是被转换为int,所以在这种情况下,在自动转换之后它看起来像这样:intc1;intc2;c1=c2;但我不明白为什么这样好,如果我知道char类型就足以满足我的需要的话。

C++ new * char 不为空

我有一个问题。我在ASIO中开发服务器,数据包在尖角字符中。当我创建新的char(例如char*buffer=newchar[128];)时,我必须手动将其清除为null。通过:for(inti=0;i我做错了什么,那个字符不清楚? 最佳答案 您不必遍历未初始化值的数组。您可以像这样动态实例化零数组:char*buffer=newchar[128]();//allelementssetto0^^ 关于C++new*char不为空,我们在StackOverflow上找到一个类似的问题: