gpt4 book ai didi

c++ - 将 '\0' 放入数组最后一个元素之后的 char[] 是否安全?

转载 作者:行者123 更新时间:2023-12-05 08:14:12 28 4
gpt4 key购买 nike

出于某些实际原因,我很感兴趣。我知道 C++ 在最后一个元素之后添加了 '\0',但是手动放置它安全吗?我听说过 undefined behavior,但是我想知道 NULL 字符是否真的是内存中的下一个符号?

UPD:我明白了,如果没有代码片段,我的问题不够清楚。所以,我问这是否真的保存并且不会导致未定义的行为?

const char* a = "Hello";
a[5] = '\0'; //this is wrong, will not compile on most compilers

char* b = new char[5];
b[5] = '\0';

char c[5];
c[5] = '\0';

最佳答案

I know C++ adds '\0' after the last element

这不是真的;至少缺少上下文,或者最坏的情况是误解。 字符串文字 末尾有一个隐式空终止符。字符串文字的隐式空终止符是数组的一部分。虽然它在字符串的最后一个字符之后,但它不是数组的最后一个元素之后;终止符数组的最后一个元素。例如,字符串文字 "" 是一个包含一个元素(空终止符)的数组,而字符串文字 "a" 是一个包含两个元素(' a' 和空终止符)。 "\0" 是一个包含两个元素(两个空终止符)的数组。

除了字符串文字之外,没有其他数组具有隐式空终止符。

Is it safe to put '\0' to char[] one after the last element of the array?

在数组边界之外读取或写入内存的行为是未定义的。它与安全相反。


const char* a = "Hello";
a[5] = '\0';

不允许通过指向 const 的指针进行赋值。这个程序是病式的,如果编译器拒绝接受这个程序,这是安全的。

char* b = new char[5];
b[5] = '\0';
char c[5];
c[5] = '\0';

索引 5 超出数组范围。行为未定义。非常不安全。

关于c++ - 将 '\0' 放入数组最后一个元素之后的 char[] 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69075047/

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