C 风格字符串本质上是一个以空字符 '\0' 结尾的字符数组。
// 这里编译器会自动在末尾添加 '\0',实际数组大小为 6 个字符
char str1[] = "Hello";
char str2[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
操作方式:
对 C 风格字符串的操作主要依赖于
#include <cstring>
#include <iostream>
int main() {
char source[] = "Hello";
char destination[10];
strcpy(destination, source);
std::cout << "Copied string: " << destination << std::endl;
char str1[] = "Hello";
char str2[] = ", World";
strcat(str1, str2);
std::cout << "Concatenated string: " << str1 << std::endl;
int result = strcmp("Hello", "Hello");
if (result == 0) {
std::cout << "The strings are equal" << std::endl;
}
return 0;
}
C 风格字符串的内存申请与释放
栈上内存申请:
可以直接声明字符数组来在栈上分配内存。例如:
char str1[10]; // 在栈上分配了一个能容纳10个字符(包括'\0')的数组
char str2[] = "Hello"; // 编译器会根据初始化内容自动确定数组大小,这里实际大小为6(含'\0')
堆上内存申请:
使用malloc、calloc或realloc函数在堆上分配内存。例如:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char *str = (char *)malloc(10 * sizeof(char));
if (str == NULL) {
perror("malloc");
return 1;
}
strcpy(str, "Hello");
// 使用完后释放内存
free(str);
return 0;
}
内存释放:
对于在堆上分配的内存(使用malloc、calloc或realloc),需要使用free函数释放。
如果不释放,会导致内存泄漏。例如上面代码中free(str)就是释放之前malloc分配的内存。
而栈上分配的字符数组(如char str1[10];),在其作用域结束时会自动释放,无需手动干预。
C 风格字符串特点:
(1)内存管理:手动管理内存,容易出现内存泄漏和越界访问等问题。例如,在使用strcpy时,如果目标数组的空间不够,就会导致缓冲区溢出。
(2)效率:在一些底层操作和对性能要求极高的场景下,C 风格字符串可能更高效,因为它们没有额外的对象开销。
标签:10,char,风格,内存,str,字符串,include From: https://www.cnblogs.com/zeoHere/p/18653128