【发布时间】:2021-09-28 06:40:03
【问题描述】:
下面的sn-p代码安全吗?它调用了 std::string 的第四个构造函数,该构造函数接受一个指向空终止字符串的指针。问题是,我不确定下面的word 是否为空终止。是吗?
std::array<char, 4> word{'a', 'b', 'c', 'd'};
int main()
{
std::string p = word.data();
return 0;
}
【问题讨论】:
-
没有。它不是以空值结尾的。要以 null 结尾,数组需要 5 个字符,最后一个是 0。您正在调用未定义的行为。
-
std::string 的第四个构造函数不接受指向空终止字符串的指针,它接受指向 char 的指针。开发人员必须注意空终止符。
-
@S.M.指向 char 的指针和指向空终止字符串的指针之间的区别在于指针的使用方式。语言本身没有区别。你是对的,确保空终止符是开发人员的责任。
-
std::string p(word.begin(), word.end()); -
@Evg 这是我以前的情况,但我处理的是
std::array<char, 50>,当使用begin和end迭代器转换为字符串时,它有46 个空终止符。哈哈……
标签: c++ arrays string pointers char