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

问题描述 投票:0回答:1

程序-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?. 也就是说,在这里 aAAAABBBB 那到底是怎么回事?当另一个数组被选中时,memset是否会改变数组的长度?memset 还是什么?

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

c++ arrays c-strings memset
1个回答
0
投票

memset是否改变了数组的长度

不,Memset不会改变数组的长度。事实上,任何数组的长度在数组的生命周期中都不会改变。

那么这是怎么回事呢?

你使用的流插入操作符有一个前置条件,即字符串必须是空结束的。违反前置条件会导致未定义的行为。

你将非空结束的字符串插入到字符流中。这违反了前置条件,程序的行为是未定义的。

© www.soinside.com 2019 - 2024. All rights reserved.