C++ - 使用带有字符串的.at()方法时的问题

Wil*_*son 0 c++

我尝试过谷歌搜索并尝试我能想到的一切,但我无法克服这个问题.所以我来到StackOverflow的主人!

我在使用.at()字符串方法时遇到问题:

std::string letters = "QWERTYUIO";

// &(letters.at(0)) now evaluates to QWERTYUIO
// &(letters.at(5)) now evaluates to YUIO
// etc.
Run Code Online (Sandbox Code Playgroud)

我想要的是字符串的第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);
}
Run Code Online (Sandbox Code Playgroud)

发生的事情是,字母变量似乎是将上一次迭代的StringY附加到自身,没有明显的原因.这让我疯了.

任何帮助表示赞赏.

非常感谢,

将.

ham*_*mar 9

at()返回对字符串中指定字符的引用,因此当您使用其地址时&,您将获得指向该字符(类型char *)的指针.

问题是你将这个指针指向一个需要指向s 数组的char指针的东西.这也有类型,char *所以它的类型检查很好,但它被视为一个字符数组而不是一个字符.

您可能只想放弃&并使用letters.at(5).


有人建议operator[]改用.如果你写的话,它仍然会导致同样的问题&(letters[5]).at()和之间的区别在于operator[]前者确实会检查,而后者则不然.

  • @Will:在这种情况下,您只需要将单个字符转换为包含单个字符的字符串.这样做的一种方法是`char foo [2] = {letters.at(5),'\ 0'};`然后将`foo`赋予`textout_ex`. (3认同)