草庐IT

c++ - 是否有不被视为字符的键盘输入?

首先感谢您花时间阅读本文,我目前正在用C++编写一个类的驱动程序,我需要用户的一些输入。我已经开始使用typedef创建验证程序,这样我就可以很容易地在不同类型之间切换。对于我正在处理的特定问题,我发现我只使用char这引出了我的问题:我的验证检查输入是否为char。如果我知道我只是在使用char,那么使用验证是否毫无意义?用户输入的所有内容似乎都是一个字符。是否有任何用户可以输入但不会被视为char的内容?这个问题可能看起来有点微不足道,但我以前从来没有真正想过这个问题!仍在学习语言,所以任何指导表示赞赏。有问题的代码(ElementType是char类型):voidgetInput

c++ - 为什么 UuidFromString 函数请求非常量指针指向 unsigned char?

我不知道为什么UuidFromString函数需要非常量指向无符号字符的指针。为什么不用constchar*代替呢?我的想法是不需要修改第一个参数所指出的数据。 最佳答案 UuidFromString专为COM/DCOM而设计。unsignedchar是为了防止需要检查负数char值(默认char是signed,这意味着值的范围是[-128,127]-因为这个字符串应该是ANSI字符,这是避免条件检查的一种廉价方法)。它的姊妹函数(UuidToString)确实需要一个const输入参数。我在文档中看不到关于为什么UuidFromS

c++ - 为什么将 "pointer to pointer to non-const"转换为 "pointer to pointer to const"是不合法的

将非const指针转换为const指针是合法的。那为什么将指向非const的指针转换为指向const的指针是不合法的呢?例如,为什么下面的代码是非法的:char*s1=0;constchar*s2=s1;//OK...char*a[MAX];//akachar**constchar**ps=a;//error! 最佳答案 来自标准:constcharc='c';char*pc;constchar**pcc=&pc;//notallowed*pcc=&c;*pc='C';//wouldallowtomodifyaconstobject

c++ - 从 boost::shared_ptr<string> 返回 C 字符串

我将一些C++代码包装在函数中,以便使C++方法在C中可用。C++API方法返回boost::shared_ptr通常的对象。我在C++中导出的函数如下所示:extern"C"constchar*Hazelcast_Map_get_int_string(Hazelcast_Client_t*hazelcastClient,constchar*mapName,intkey,char**errptr){IMapmap=hazelcastClient->client->getMap(mapName);boost::shared_ptrvalue=map.get(key);string*str

c++ - 数组衰减到指针和重载解析

我希望能够在重载决策中区分数组和指针:classstring{public:string(constchar*c_str);templatestring(constchar(&str)[N]);};intmain(){constchar*c_str="foo";stringfoo(c_str);//okwillcallstring(constchar*)stringbar("bar");//callstring(constchar*)insteadofthearrayversion}到目前为止我发现的最好的方法是使用对指针的引用而不是指针:classstring{public:stri

c++ - const char[] 默认函数参数

我定义了这样一个类型:typedefcharsType[256];和一个带有默认参数的函数:voidfoo(constsTypeparam=NULL);MinGW(g++4.8.0)编译它没有错误。相反,VisualStudio2015(Tools14.0)给出了以下错误:errorC2040:'sType':'int'differsinlevelsofindirectionfrom'char[256]'我试图将NULL转换为constchar[],但这会导致:errorC2440:'typecast':cannotconvertfrom'int'to'constchar[]'有什么提

c++ - 将 python 列表包装为 unsigned char*

编辑:大家好!!我目前正在尝试从Python访问C++函数,当我尝试将Python列表作为参数传递给函数时遇到了问题。这是我试图访问的C++函数定义(用于向PC/SC阅读器发送命令):SRpdu*SendAPDU(unsignedintuiAPDU,//CommandunsignedintucLE,//DataexpectedforresponseunsignedintucLC,//Sizeofdatabufferunsignedchar*pucDataBuf=0);//databuffer我的目标是像下面的示例一样从python调用此函数。目标是将列表[1,2,3]转换为unsign

c++ - 使用 char 参数从 <cctype> 调用函数是否安全?

C编程语言表示来自的函数遵循一个共同的要求:ISOC99,7.4p1:Inallcasestheargumentisanint,thevalueofwhichshallberepresentableasanunsignedcharorshallequalthevalueofthemacroEOF.Iftheargumenthasanyothervalue,thebehaviorisundefined.这意味着下面的代码是不安全的:intupper(constchar*s,size_tindex){returntoupper(s[index]);}如果此代码在char的实现上执行与sig

C++ 对重载函数的模糊调用

我有以下用于“安全”strncpy()的代码——基本上它的包装器自动为字符串缓冲区采用固定的数组大小,因此您不必做额外的工作来传递它们(而且这种便利性更安全因为您不会不小心输入错误的固定数组缓冲区大小)。inlinevoidMySafeStrncpy(char*strDest,size_tmaxsize,constchar*strSource){if(maxsize){maxsize--;strncpy(strDest,strSource,maxsize);strDest[maxsize]=0;}}inlinevoidMySafeStrncpy(char*strDest,size_tm

c++ - "empty"可变模板特化的地址

我有一个可变模板成员函数定义为:templateVAlgorithm*CreateAlgorithm(constchar*objectName,constchar*className,Params...par)我想获取Params不包含类型的专用版本的地址(我称之为“空”专用化),即:VAlgorithm*CreateAlgorithm(constchar*objectName,constchar*className)我尝试了几种方法。天真的方式:&AlgorithmFactory::CreateAlgorithm(因为,例如,&AlgorithmFactory::CreateAlgo