【问题标题】:Remove last character of std::string_view删除 std::string_view 的最后一个字符
【发布时间】:2020-04-08 16:15:58
【问题描述】:

我正在尝试删除 std 字符串视图的最后一个字符,但无论我做什么,它都保留在那里。我认为这是因为我不小心删除了“/0”而不是所需的“]”。

这是我的代码:

#include <iostream>
#include <tstr/tstring.h>
#include <cstring>

template<typename Class>
constexpr const char* to_string() {
    std::string_view str = __PRETTY_FUNCTION__;
    auto first = str.find("= ");
    auto last = str.find("]");
    auto str2 = str.substr(first + 2, last - first + 1);
    return str2.data();
}

class Foo {};

int main()
{
    std::cout << to_string<Foo>() << std::endl;
    return 0;
}

这会输出Foo]。如何删除尾随的]

谢谢。

【问题讨论】:

标签: c++ gcc string-view


【解决方案1】:

如果将指向 char 的指针插入到字符流中,则会打印指向的字符串,直到到达空终止符。如果没有空终止符,则程序的行为是未定义的。

std::string_view 不保证为空终止。因此将std::string_view::data 插入字符流是很危险的。在这种特殊情况下,字符串视图指向空终止字符串中的非空终止子字符串,因此行为是明确定义的,但不是您想要的,因为输出将继续到子字符串的外部。

如何删除前置的 ] ?

将字符串视图返回到子字符串而不是指针:

constexpr std::string_view to_string() {
    ...
    return str2;
}

【讨论】:

    猜你喜欢
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多