提问者:小点点

当另一个数组是memset时,memset会改变数组长度吗?


程序-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?。 这意味着,这里的aaaaabbbb,但我将长度声明为4! 那么到底是怎么回事呢? 当另一个数组是memset或什么的时候,memset会改变数组长度吗?!

我的构建行是g++-wall-wextra-std=C++17 main.cpp-o main


共1个答案

匿名用户

memset会改变数组长度吗

不。Memset不改变数组长度。 事实上,任何数组的长度在数组的生存期内永远不会改变。

那么到底是怎么回事呢?

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

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