我创建了 char arr[] 并分配给它字符串文字
char arr[] = "some string"; // arr occupies 12 chars in memory
std::cout << std::strlen(arr) << std::endl; // lenght is 11 chars + 1 null-terminator
//arr[11] is '\0'
Run Code Online (Sandbox Code Playgroud)
接下来我将空终止符放入 6 个元素
arr[5] = '\0';
std::cout << std::strlen(arr) << std::endl; // lenght is 5 chars + 1 null-terminator
Run Code Online (Sandbox Code Playgroud)
在这段代码中:
char arr[] = "some string";
Run Code Online (Sandbox Code Playgroud)
变量arr是一个固定大小的静态数组。这里没有动态内存分配,因此无需担心内存泄漏。无论您写入什么,编译器都会处理内存arr。
- 是内存泄漏吗?
不。
- 编译器如何知道它必须在第一个 '\0' 之后释放内存?(什么时候会删除变量arr)
变量是 12 个字符。这和写一样:
char arr[12] = "some string";
Run Code Online (Sandbox Code Playgroud)
所以它总是会释放 12 个字符。该变量是一个 12 个字符的数组;第 6 个字符恰好是 '\0' 的事实完全无关紧要。
顺便说一下,一旦您将第 6 个字符设置为 '\0',您仍然可以使用所有 12 个字符,因为它仍然是一个 12 个字符的数组。即使是'\0'之后的那些。但是您不能在其中存储 13 个字符。
- 是否可以更改此 arr 变量的长度并通知编译器在删除变量时应释放多少?
不可以。无法更改任何变量的大小。
| 归档时间: |
|
| 查看次数: |
389 次 |
| 最近记录: |