当另一个数组是内存集时,内存集是否会更改数组长度?

Does memset change the array length when another array is memset?

本文关键字:数组 内存 另一个 是否      更新时间:2023-10-16

program-1->

#include <iostream>
#include <cstring>
int main()
{
char a[4];
memset(a, 'A', sizeof a);
std::cout << a << '!';
return 0;
}

程序 1 输出我期望的AAAA!但是一旦我引入另一个字符串(字符数组(,事情就会改变!

程序-2->

#include <iostream>
#include <cstring>
int main()
{
char a[4], b[4];
memset(a, 'A', sizeof a);
memset(b, 'B', sizeof b);
std::cout << a << '!';
std::cout << ' ' << b << '?';
return 0;
}

程序 2 输出AAAABBBB! BBBB?.这意味着,这里aAAAABBBB但我宣布长度为 4!这到底是怎么回事呢?当另一个数组被memset时,memset 会改变数组长度吗?!

我的构建线是g++ -Wall -Wextra -std=c++17 main.cpp -o main

内存集是否更改了数组长度

不。内存集不会更改数组长度。事实上,任何数组的长度在数组的生命周期内都不会改变。

这到底是怎么回事呢?

您使用的流插入运算符具有字符串必须以 null 结尾的前提条件。违反前提条件会导致未定义的行为。

将非 null 终止的字符串插入字符流中。这违反了前提条件,程序的行为是未定义的。