提问人:Sandro Jijavadze 提问时间:7/24/2022 更新时间:7/24/2022 访问量:61
示例中的 C++ 字符串和字符*差异
C++ string and char* difference in example
问:
这是来自hackerrank的“继承代码”的例子,
虽然这有效并返回,如果我注释返回并取消注释,则当前注释的部分将返回垃圾。what()
n
what
what()
它们在我看来是一样的,有什么区别?
/* Define the exception here */
struct BadLengthException : public exception {
public:
int num;
string stra;
BadLengthException(int n){
this->num = n;
this->stra = to_string(this->num);
};
const char * what () const throw () {
return this->stra.c_str();
//string a = to_string(this->num);
//return a.c_str();
}
};
答:
7赞
lorro
7/24/2022
#1
string a
是 中的本地 (ASDV)。当您返回时,它超出了范围。 只是一个指针,它是非所有权的,因此不会延长 char 缓冲区的生存期,因此它是 UB。在UB的情况下,任何事情都可能发生,包括归还垃圾。what()
a.c_str()
评论
1赞
QuentinUK
7/24/2022
我的版本是不完整和不可信的,没有这个首字母缩略词。
1赞
lorro
7/24/2022
@QuentinUK ASDV 是自动存储持续时间变量,但该标准的名称是指通常所说的“局部”变量。
0赞
Sandro Jijavadze
7/25/2022
这就解释了,谢谢。知道为什么我的问题被否决了吗?
1赞
lorro
7/25/2022
@SandroJijavadze 不是我。虽然这是一个基本问题,但我认为这也是一个完全有效的问题。也许有些人忘记了他们问这样的问题......
评论
a
what
stra
what