草庐IT

c++ - 初始化字符**

我是C++的新手。我正在尝试调用一个接受char**的函数:boolfunc(char**a){//blablabla}所以它接收一个C字符串数组。我需要创建一个char**,但没有任何效果。char**a=char[255][255];//error:typenameisnotallowedchar**a=newchar[255][255];//error:avalueoftype"char(*)[255]"cannotbeusedtoinitializeanentityoftype"char**"chara[][]={"banana","apple"};char**b=&a;//e

c++ - 从 std::istreambuf_iterator 创建 std::string,奇怪的语法怪癖

我在某处发现了以下用于将文件读入字符串的习语:std::ifstreamfile("path/to/some/file.ext");std::stringcontents(std::istreambuf_iterator(file),(std::istreambuf_iterator()));它现在工作得很好。但是,如果我删除第二个迭代器参数周围的括号,即:std::stringcontents(std::istreambuf_iterator(file),std::istreambuf_iterator());一旦我尝试在字符串对象上调用任何方法,例如:constchar*buffe

c++ - 修改 C++ 字符串对象的底层 char 数组

我的代码是这样的:strings="abc";char*pc=const_cast(s.c_str());pc[1]='x';cout当我使用GCC编译上面的代码片段时,我得到了预期的结果"axc"。我的问题是,以这种方式修改C++字符串的底层char数组是否安全且可移植?或者可能有其他方法可以直接操作字符串的数据?仅供引用,我的目的是编写一些可以被C和C++调用的纯C函数,因此,它们只能接受char*作为参数。从char*到string,我知道涉及复制,惩罚是不利的。那么,任何人都可以提出一些建议来处理这种情况。 最佳答案 对于第

c++ - 重载运算符<<(unsigned char typedef as byte)

我想重载(劫持?)ostream和basic_ostream以便它停止尝试将八位字节(无符号字符)显示为可打印字符。我一直住在cout和friend们在屏幕上放笑脸的时间太长了。我厌倦了与Actor一起工作:hex.是否可以覆盖标准行为?我已经尝试过模板和非模板覆盖。它们编译,但似乎没有被调用。 最佳答案 问题是已经有一个templatestd::basic_ostream&operator&,charT);在namespacestd.自basic_ostream也在这个命名空间中,ADL在你输出unsignedchar时选择它.添

c++ - 在模板类中为 >> 和 << 运算符实现重载

我正在尝试在类定义之外编写用于重载运算符“>>”和“1>Source.obj:errorLNK2019:unresolvedexternalsymbol"classstd::basic_istream>&__cdecloperator>>(classstd::basic_istream>&,classMyClass&)"(??5@YAAAV?$basic_istream@DU?$char_traits@D@std@@@std@@AAV01@AAV?$MyClass@H@@@Z)referencedinfunction_main1>Source.obj:errorLNK2019:unre

c++ - 如何使指针指向二维数组的任意数组元素?

开门见山我希望字符指针p指向唯一包含字符“T”的数组元素。chara[100][100];char*p;for(inti=0;i附言我尝试了*、**等的各种组合,但似乎没有任何效果。 最佳答案 使用它的地址:chara[100][100];char*p;for(inti=0;ia[i][j]是char类型,p是char*类型,它拥有一个地址。要获取变量的地址,请在其前面加上&。指针上的*运算符以相反的方式工作。如果您想取回'T',您可以使用:chartheT=*p; 关于c++-如何使指

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++ - 是否可以从 C++ 中的模板类型获取 char* 名称

我想获取模板类型的字符串名称(constchar*)。很遗憾,我无法访问RTTI。templatestructSomeClass{constchar*GetClassName()const{return/*magicgoeshere*/;}}所以SomeClasssc;sc.GetClassName();//returns"int"这可能吗?我找不到办法,快要放弃了。感谢您的帮助。 最佳答案 不,它也不能可靠地与typeid一起工作。它将为您提供一些取决于编译器实现的内部字符串。int常见于“int”和“i”之类的东西.顺便说一句,

c++ - 如何将一系列数据从 char 数组复制到 vector 中?

我已将文件内容读入一个char数组,然后将其中的一些数据读入一个vector。如何将char数组的范围复制到vector中?vector和char数组都是同一类型(unsignedchar)。当前代码是这样的:intp=0;for(...){shortlen=(arr[p+1]我想通过使用push_back删除循环来改进这一点,怎么做? 最佳答案 可以使用insert()向vector添加内容。成员函数:vec.insert(vec.end(),arr,arr+len);当然,还有一个assign(),这可能更接近你想做的事情:ve

c++ - 为什么 `std::copy` 在我的测试程序中从 char 缓冲区读取一个 int 比 `memcpy` 慢 5 倍(!)?

这是thisquestion的后续行动我在哪里发布了这个程序:#include#include#include#include#include#include#include#include#includeclassStopwatch{public:typedefstd::chrono::high_resolution_clockClock;//!ConstructorstartsthestopwatchStopwatch():mStart(Clock::now()){}//!Returnselapsednumberofsecondsindecimalform.doubleelapse