程序-1->
#include <iostream>
#include <cstring>
int main()
{
char a[4];
memset(a, 'A', sizeof a);
std::cout << a << '!';
return 0;
}
程序-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
那到底是怎么回事?当另一个数组被选中时,memset是否会改变数组的长度?memset
还是什么?
我的建线是 g++ -Wall -Wextra -std=c++17 main.cpp -o main
memset是否改变了数组的长度
不,Memset不会改变数组的长度。事实上,任何数组的长度在数组的生命周期中都不会改变。
那么这是怎么回事呢?
你使用的流插入操作符有一个前置条件,即字符串必须是空结束的。违反前置条件会导致未定义的行为。
你将非空结束的字符串插入到字符流中。这违反了前置条件,程序的行为是未定义的。