【问题标题】:How to you get the address of an element in an std::string in C++? [duplicate]如何在 C++ 中获取 std::string 中元素的地址? [复制]
【发布时间】:2017-07-04 16:12:33
【问题描述】:

例如,我有以下字符串:

std::string s = "Hello, World!"

我想要s 的最后一个元素的地址,即'!'

我尝试了以下代码,但它似乎没有输出我想要的内容。

std::cout << &s[s.length() - 1];

输出'!' 不是地址,s.back() 也是如此

std::cout造成的格式化还是其他地方的问题?

基本上我想要一个输出字符串中最后一个(如果可能的话,也是第一个)元素的地址的函数。

【问题讨论】:

    标签: c++ arrays string memory-address


    【解决方案1】:

    目前,您正在使用operator&lt;&lt; 的重载,它接受const char* 作为输入。它将输入视为以 null 结尾的 C 字符串。

    如果你投到(const void*),问题就会消失:

    std::cout << (const void*)(&s[s.length() - 1]);
    

    【讨论】:

    • 我唯一的抱怨是你使用了 C 风格的演员表。static_cast 应该是首选 IMO。 :)
    • @Someprogrammerdude:我明白你的意思,但我认为这是以牺牲调用站点的可读性为代价的。也许我在年轻时用 C 编程花了太多时间;-)
    • 你还年轻!
    【解决方案2】:
    auto address_back = &s.back();
    auto address_front = &s.front();
    
    cout << static_cast<void*>(address_back) << endl;
    cout << static_cast<void*>(address_front) << endl;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-11
      • 2010-12-29
      • 2013-04-16
      • 2011-12-30
      • 1970-01-01
      • 2012-03-20
      • 1970-01-01
      相关资源
      最近更新 更多