C++-将.at()方法与字符串一起使用时出现问题
C++ - Issue when using .at() method with string
我试过在谷歌上搜索,并尝试了我能想到的一切,但我无法克服这个问题。所以我来到了StackOverflow的大师们!
我在使用.at((字符串方法时遇到问题:
std::string letters = "QWERTYUIO";
// &(letters.at(0)) now evaluates to QWERTYUIO
// &(letters.at(5)) now evaluates to YUIO
// etc.
我想要的是字符串的第n个字符,而不是从第n个开始的字符串。
我试过[]话务员,但现在有一个新问题。目前的代码是(使用Allegro库,但我不认为这会影响这一点(:
std::string letters = "QWERTYUIO";
char letter;
char StringY[5];
int row = 0;
for(int l = 0; l <= 2; ++l){
letter = letters[row + l];
textout_ex(buffer, font, &letter, l * 30, 20, makecol(255, 255, 255), -1);
sprintf(StringY, "%d", inventoryNum[row + l + 9]);
textout_ex(buffer, font, StringY, l * 30, 20, makecol(255, 255, 255), -1);
}
发生的情况是,letter变量似乎毫无明显原因地将上一次迭代的StringY附加到了自己身上。这简直把我逼疯了。
感谢您的帮助。
非常感谢,
威尔。
at()
返回对字符串中指定字符的引用,因此当您将其地址与&
一起使用时,您将获得指向该字符(类型为char *
(的指针。
问题是,您将这个指针提供给某个对象,该对象需要指向char
s的数组的指针。它也有类型char *
,所以它的类型检查很好,但它被视为一个字符数组,而不是单个字符。
您可能只想放弃&
并使用letters.at(5)
。
有些人建议改用operator[]
。如果您编写&(letters[5])
,它仍然会导致相同的问题。at()
和operator[]
的区别在于前者进行边界检查,而后者不进行边界检查。
请参阅上的字符串:
将其用作:
(letters.at(0));
(letters.at(5));
使用operator[]
。
char c = letters[5];
编辑:您的问题是快板库。它有几十年的历史了,是用C写的。你真的需要本世纪的东西。例如,对于您的sprintf
,我当然希望它不需要超过5个字符,而且您从未编写过0终止符或类似的东西。
你应该转向更现代的东西,比如Direct3D本身。D3DX有一个Font类,它可以透明地呈现文本,而无需用户手动将其写入纹理,并且您可以使用自己的C++字符串处理,而不是发布的代码中令人厌恶的处理。这至少是一个小的改进:
std::string letters = "QWERTYUIO";
std::stringstream strstream;
for(int l = 0, row = 0; l <= 2; ++l){
char letter;
letter = letters[row + l];
textout_ex(buffer, font, &letter, l * 30, 20, makecol(255, 255, 255), -1);
strstream << inventoryNum[row + l + 9];
textout_ex(buffer, font, strstream.str().c_str(), l * 30, 20, makecol(255, 255, 255), -1);
strstream.clear();
}
只要说letters[5]
,或者你需要的任何位置。
- 如何将GTest与CMake一起使用?遵循谷歌指南时的链接问题
- 在浮点精度成为一个问题之前,可以将多少个浮点值加在一起
- 将cpp_redis pub/sub与条件变量一起使用时出现问题
- 在本地安装OpenMPI的问题与CUDA一起使用
- 与自定义命名空间一起使用时实现 std::error_category、名称解析问题
- 与lambda一起使用虚拟继承在初始化列表中捕获此问题的GCC错误
- 将 cplex 与 netbeans c++ 一起使用,链接器问题
- 将双缓冲位图与 AlphaBlend 一起使用时出现的问题
- 有关将智能指针与 Winsock 的 addrinfo 结构一起使用的问题
- QT TreeView问题与排序模型一起使用
- 将模板气泡排序与结构数组一起使用时出现问题
- 将 boost/thread headers 与 clang++ (Windows) 一起使用时出现问题
- 将 Botan 与 Qt 一起使用时遇到问题
- 与私人成员一起上课.这个代码出了什么问题
- 将指针与动态数组一起使用时出现问题
- 将问题与多个文件链接在一起
- Clang:将绑定或mem_fn与字符串::c_str和转换一起使用时出现问题
- 将get_value与 Boost 的属性树一起使用时遇到问题
- 将字符串与 sprintf() 函数一起使用时出现问题
- 将矢量与函数一起使用,指针问题