程序-1->;
#include <iostream>
#include <cstring>
int main()
{
char a[4];
memset(a, 'A', sizeof a);
std::cout << a << '!';
return 0;
}
program-1输出了我所期望的aaaa!
,但是只要我引入了另一个字符串(char数组),情况就改变了!
程序-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?
。 这意味着,这里的a
是aaaabbbb
,但我将长度声明为4! 那么到底是怎么回事呢? 当另一个数组是memset
或什么的时候,memset会改变数组长度吗?!
我的构建行是g++-wall-wextra-std=C++17 main.cpp-o main
memset会改变数组长度吗
不。Memset不改变数组长度。 事实上,任何数组的长度在数组的生存期内永远不会改变。
那么到底是怎么回事呢?
您使用的流插入运算符有一个前提条件,即字符串必须以null结尾。 违反前提条件会导致未定义的行为。
在字符流中插入非NULL终止字符串。 这违反了前提条件,并且程序的行为是未定义的。