gpt4 book ai didi

C++ 奇怪的字符串/字符* 异常行为

转载 作者:太空狗 更新时间:2023-10-29 20:22:10 25 4
gpt4 key购买 nike

这是我的异常代码:

class OptionNotFoundError: public std::exception {
public:
OptionNotFoundError(std::string option, int position) throw()
: option(option), position(position) {}
OptionNotFoundError(char option_, int position) throw()
: position(position) { option.push_back(option_); }

virtual ~OptionNotFoundError() throw() {}

virtual const char* what() const throw() {
std::string what_str = "Option '" + option + "' not found in position " + std::to_string(position);
std::cout << what_str.c_str() << std::endl;
return what_str.c_str();;
}

std::string option;
int position;
};

当抛出异常时,这是我在终端中得到的:

terminate called after throwing an instance of 'Args::OptionNotFoundError'
Option 'c' not found in position 1
what():

所以 cout工作正常,但是……不是返回。如果我使用 return "smth"它工作正常。

更奇怪:如果我将 what_str 定义替换为

std::string what_str = "test";

我明白了

terminate called after throwing an instance of 'Args::OptionNotFoundError'
test
what(): x�zL�

同样,cout<<工作良好。但是返回……没那么多。这是编码错误吗?

最佳答案

    return what_str.c_str();;

c_str() 返回指向 std::string 内部内容的指针。

此指针仅在任一个之前保持有效

  1. std::string 对象被销毁。

  2. std::string 对象被修改。

从中获取此 c_str() 指针的 std::string 对象在您的函数返回时被销毁。

这会导致未定义的行为。

您的函数返回的 const char * 无效。它指向被销毁对象的内部内容。

关于C++ 奇怪的字符串/字符* 异常行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39308500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com