草庐IT

c++ - 此代码是否应引起警告

我遇到了类似于下面的合法代码,尽管不是很聪明。在作用域中的同一函数中同时使用相同名称的两个堆栈变量是合法的,但它可能会导致问题。(阅读:我只是浪费了半个小时来调试它)。在VS2010上的警告级别4(最高级别),我希望它会捕获这种东西。我是不是遗漏了什么,或者是时候用lint遍历整个代码库了?诸如lint之类的静态分析工具甚至会发现这样的名称冲突吗?char*x=strchr(Buffer,'');if(x){*x=0;x++;char*x=strchr(x,'')if(x)*x=0;} 最佳答案 PC-Lint会检测到这一点。以下代

char 类型的 C++ 枚举,被编译器忽略或意外行为?

我用枚举做了一个小测试,这是我拥有的:enumanyoldname:char{aa='a',ab='b',ac='c',ad='d'};intmain(){anyoldnamei_have_an_enum_here=aa;//Wouldexpecti_have_an_enum_heretobeoftypechar?std::cout输出是:98,除非我像这样显式转换为char:std::cout或者将anyoldname改为char。为什么打印的是98而不是b?顺便说一句,sizeof()返回1,即;1个字节,一个char。 最佳答案

c++ - 当需要指向全局函数的指针时如何使用指向成员函数的指针?

我有以下问题。我必须使用一个接受回调的函数。实现回调是棘手的部分,因为除了我可以从输入参数中提取的信息之外,我还需要更多信息。我将尝试举一个例子:typedefint(*fptr)(char*in,char*out);//thecallbackihavetoimplementinttakeFptr(fptrf,char*someOtherParameters);//themethodihavetouse问题是我需要除“in”参数之外的其他信息来构造“out”参数。我试过这种方法:classWrapper{public:intcallback(char*in,char*out){//us

c++ - 使用带有 char * 的正则表达式迭代器

我正在尝试将文件读入缓冲区,然后使用正则表达式迭代器。我知道我可以将C++字符串迭代器与正则表达式迭代器一起使用(构造函数是std::regex_iterator),但我想避免将缓冲区复制到字符串中并继续使用低级函数来读取文件(现在我使用open()和read())。structstatbuff;intfile=open(argv[1],O_RDONLY);if(!file)cout我认为我的选择是找到一种使用read()的方法使用C++字符串而不是char*或在char数组上使用正则表达式迭代器的方法。我可以写一个,但我也在努力让我的程序尽可能小。有什么办法可以做到吗?如何将C++字

c++ - string s怎么改成char * a[]?

我要转型字符串s="aaa,bbb,ccc"进入:char*a[]={"aaa","bbb","ccc"}你能帮我编写程序来处理这个过程吗?我会尝试这样编程:strings="aaa,bbb,ccc";char*a[];charid[]="";strcpy(id,s.c_str());constchar*split=",";char*p;p=strtok(id,split);while(p!=NULL){inti=0;printf("%s\n",p);a[i]=p;i++;p=strtok(NULL,split);}我哪里错了?谁能指点一下? 最佳答案

c++ - 创建一个字符串如何改变 const char* 指向的值?

我编写了一个函数,它接受一个字符串并返回一个constchar*,其中包含该字符串的编码版本。我调用这个函数,然后创建一个新的字符串。这样做时,我无意中更改了指向我的constchar*的值,我认为这是不可能的。但是,当我不使用我自己的函数,而只是将一个值硬编码到我的constchar数组中时,当我创建一个字符串时该值不会改变。为什么这里有区别,为什么我仍然能够更改constchar数组的值?#include#include#include#include#includeusingnamespacestd;//returns"@username@FIN"constchar*encode

c++ - `reinterpret_cast<char*>(reinterpret_cast<uintptr_t>(&ch) + 1) == &ch +1` 有保证吗?

我正在编写与对齐相关的代码,如果给定的指针正确对齐,却没有标准的功能测试,这让我感到非常惊讶。似乎互联网上的大多数代码都使用(long)ptr或reinterpret_cast(ptr)测试对齐,我也使用了它们,但我想知道使用指向整数类型的强制转换指针是否符合标准。这里是否有任何系统触发断言?charch[2];assert(reinterpret_cast(reinterpret_cast(&ch[0])+1)==&ch[1]); 最佳答案 回答题目中的问题:没有。反例:在旧的Pr1me微型计算机上,一个普通指针是两个16位字。第

c++ - 为什么我不能在 struct 中初始化 char 数组

我尝试通过以下方式在结构声明中初始化一个char数组。但它无法编译并显示错误消息。请告诉我为什么它无法编译。#includestructA{constcharvalue_in_struct[]="a";//thislinegivesmeaerrormessage.};voidt(void){constcharvalue[]="a";//thislinewasokatcompilingstd::cout我从gcc收到以下错误消息。../static_constexpr_array.hpp:16:33:error:initializer-stringforarrayofcharsistoo

c++ - 为什么 C++ char 数据类型 3d array 当传递参数第一个括号为空时

请看下面的代码:#includeusingnamespacestd;intmain(){charmatrix[2][2][2];return0;}intgetMatrixData(charmatrix[][2][2],intx,inty,intz){returnmatrix[x][y][z];}矩阵3d数组作为参数传入函数时,为什么不指定第一个[]大小就可以了?如何解释这个缺失的维度? 最佳答案 您的代码在语法上不正确。假设您的意思是intgetMatrixData(charmatrix[][2][2],intx,inty,intz

c++ - const char * 与其他指针不同吗?

这个问题在这里已经有了答案:Whydoescoutprintchararraysdifferentlyfromotherarrays?(4个答案)关闭4年前。所以我最近一直在深入研究指针和引用,因为它们经常出现在我用来学习OpenGL的资源中。我注意到constchar*指针的行为似乎与其他指针有些不同。为了演示,我创建了这个测试程序:#includeintmain(){inti=2;int*pi;//constcharc="helloworld";constchar*pc="helloworld";pi=&i;std::cout输出:'helloworld'typeischarcon