【发布时间】:2020-06-13 12:22:35
【问题描述】:
程序-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;
}
program-2 输出 AAAABBBB! BBBB?。这意味着,这里a 是AAAABBBB
但我宣布长度为 4!那么发生了什么?当另一个数组是memset 什么的时候,memset 会改变数组长度吗?!
我的构建线是g++ -Wall -Wextra -std=c++17 main.cpp -o main
【问题讨论】:
-
std::cout打印字符直到\0。你的数组中没有这样的,所以它继续经过a,即 UB -
所以如果我想用 memset 正确地填充一个字符串(最后有一个
\0),该怎么做? -
您需要为空终止符“\0”再分配一个字符。而不是 4 分配 5。
char a[5], b[5];和 memset 永远不会改变数组长度。 -
@Adam 什么是 memset 行?
-
另外,在 C++ 中使用
std::string代替字符数组,除非您有充分的理由使用字符数组。 (你几乎肯定不会。)C 拼写“字符串”char[]。 C++ 拼写字符串std::string。
标签: c++ arrays c-strings memset