本篇文章主要记录下字符串相关操作,以及内存四区
字符串
在c语言中没有字符串类型,c语言是通过数组来模拟的,可以通过两种方式来表示字符串
//通过数组来表示,这个时候会在数组的末尾有个'\0'字符,用于表示字符串结束
char string1[] = "abcd";
//通过指针来表示
char *string2 = "abcd";
跟字符串相关很重要的一个知识点是:字符串的处理函数,需要引入头文件string.h。这里介绍几个常用的
- strlen 获取字符串的长度
- strcmp 比较字符串
- strcpy 复制字符串
- strncpy 复制指定个数的字符串
- strcat 字符串拼接
- strncat 拼接指定个数字符串
- strstr 查找字符串
- strchr 查找字符
- strtok 字符串分割
内存四区
之前介绍过,c语言是偏底层的语言,因为其可以使用指针直接操作内存。为了更好的了解使用c语言,有必要掌握c语言的内存模型。
c语言内存会被划分为4个区。栈区 堆区 全局区(分为已初始化,未初始化变量) 代码区
-
栈区 函数中定义的变量等都在栈区分配内存。其分配与释放都是系统来控制,无需手动释放
-
堆区 通过malloc函数手动分配的内存在堆区,在堆区分配的内存需要用free函数来手动释放,否则一直到程序结束
-
全局区 全局变量 字符串等会存储在全局区。全局区在程序运行生命周期中不会释放。
//hello world 会存储在全局区 字符串都是常量,java中也一样
char *string = "hello world";
- 代码区 代码存放的位置
char * testMalloc()
{
//在堆上分配100字节的空间
char *str = (char *)malloc(100);
//给str指向的内存空间赋值hello world
strcpy(str, "hello world");
//返回str,这样外部就可以通过这个函数的返回值操作堆上的内容了
return str;
}
int main()
{
//调用函数返回个指针,也就是个地址
char *str = testMalloc();
//对str指向的字符串进行输出
printf("string is %s\n", str);
if (str != NULL)
{
//把堆上的内存进行释放
free(str);
str = NULL;
}
return 0;
}
重点:堆上分配的内存一定要记得释放