C++ —— string容器(下)
string 容器设计的目标是什么
思考一下,char c[5];
是什么?
回答1:c
可以是存放4
个字符的C
风格字符数组。(不准)
回答2:c
是可以存放5
个字符的字符数组。(不准)
回答3:c
是一块5
字节的内存空间。(准确)
计算机的内存就是一块空间,没有数据类型的说法。
先来了解一个C++
中用于字符串复制
的一个标准库函数strcpy(destination, source);
代码如下:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
const char* src = "Hello, World!";
char dest[20];
strcpy(dest, src);
cout << "src: " << src << endl;
cout << "dest: " << dest << endl;
return 0;
}
strcpy()
会将源
字符串(source
)的内容复制到目标
字符串(destination
)中,直到遇到字符串结束符\0
。这个函数会将源字符串
中的所有字符
(包括\0
)逐一复制
到目标字符串
中。
destination
数组必须足够大
,以容纳源字符串。如果目标数组没有足够
的空间,就会发生 缓冲区溢出
,导致未定义行为,这可能会导致程序崩溃或数据损坏。
运行结果如下:
src: Hello, World!
dest: Hello, World!
字符串空间用于不同的数据类型
直接看示例代码以及注释内容:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char c[8]; // 在栈上分配8字节的内存空间
// c的内存空间用于字符串
strcpy(c, "abcd"); // 将字符串"abcd"复制到c中
cout << "c = " << c << endl; // c = abcd
// 把c的内存空间用于int型变量
int* a, *b;
a = (int *)c; // 前4个字节的空间用于整数a
b = (int *)c + 4