如果我想构造一个std :: string,其行如下:
std::string my_string("a\0b");
我希望在结果字符串中有三个字符(a,null,b),我只得到一个.什么是正确的语法?
我在C++中有一个(生成的)文字字符串,可能包含需要使用\x表示法转义的字符.例如:
char foo[] = "\xABEcho";
但是,g ++(版本4.1.2,如果它很重要)会抛出一个错误:
test.cpp:1: error: hex escape sequence out of range
编译器似乎将Ec字符视为前一个十六进制数字的一部分(因为它们看起来像十六进制数字).由于四位十六进制数不适合a char,因此会引发错误.显然,对于宽字符串文字L"\xABEcho",第一个字符是U + ABEC,其次是L"ho".
在过去的几十年里,这似乎发生了变化,我从未注意到.我几乎可以肯定旧的C编译器只会考虑两个十六进制数字\x,而不再看了.
我可以想到一个解决方法:
char foo[] = "\xAB""Echo";
但那有点难看.所以我有三个问题:
这什么时候改变了?
为什么编译器只接受> 2位十六进制转义为宽字符串文字?
有没有比上述更难的解决方法?
我有一系列字符我正在为解码功能提供支持:
例如:
"\x05three"
(是的,这是一个Pascal样式的字符串.该函数将长度为前缀的字符串转换为以空字符结尾的字符串.)
我写了几个测试用例,其中包括:
"\x04four"
令我惊讶的是,它出现了"Oour".仔细观察,事实证明Visual Studio的转义序列规范允许,我的序列基本上被解释为\x04f,基数10中的79(因此我的结果字符串变为"Oour",79变为"O")
我的解决方案只是拆分字符串:
"\x04" "four"
问题:是否存在另一种逃避或终止转义序列的方法?
我试图在 C++ 中使用 Unicode 字符“”('\uD83D\DC50'),但编译器报告以下错误:“无效的通用字符”。
我有一些文件类型为"文件"我的意思是代替"资源\ sample.txt",他们的名字是"资源\样本"现在我想用c ++读取它们并将它们存储在一个字符串中.这是我的代码:
std::stringstream textBuffer;
std::fstream fileHandle;
std::string content
fileHandle.open("Resource\sample", std::ios::in);
textBuffer << fileHandle.rdbuf();
content = textBuffer.str();
fileHandle.close();
但是当我编译它时,"content"变量的值等于"".帮助我.提前致谢.请注意,唯一的问题是文件没有任何扩展名,例如.txt或.dat或.bin.
如果最大值char可以保持为255,那么如果我创建一个类型的变量char number并将其设置为等于= 255;那么std::cout << number;程序如何返回\377呢?