C语言动态内存管理与常用函数详解

4星 · 超过85%的资源 需积分: 10 16 下载量 51 浏览量 更新于2024-07-17 3 收藏 621KB PDF 举报
"C语言参考手册是一本针对C语言学习者和备考二级考试的学生的实用参考资料,涵盖了C语言的基础知识,包括ASCII编码、动态内存管理、日期和时间处理、字符串操作、字符数组操作、算法、数值计算、输入/输出支持以及文件操作等多个方面。" 在C语言中,动态内存管理是非常重要的一部分,它涉及到`malloc`、`free`和`realloc`三个关键函数。`malloc`函数用于动态地分配指定大小的内存空间,返回一个指向该内存的指针。程序员需要注意,使用完毕后必须通过`free`函数释放内存,以防止内存泄漏。例如: ```c #include <stdlib.h> int main(void) { int *p = malloc(sizeof(int) * 4); // 分配4个整数大小的内存 // 使用分配的内存... free(p); // 释放内存 return 0; } ``` `realloc`函数则用于改变已经分配的内存区域的大小,它可以扩大或缩小内存块。如果扩大内存,新分配的部分内容是未定义的;如果缩小内存,原有内存区域中超出新大小的部分将被释放。如果`realloc`失败,原有的内存块不会被释放,因此在使用时要特别注意处理返回的空指针。 ```c #include <stdlib.h> int main(void) { int *p = malloc(sizeof(int) * 4); // ... 使用内存 p = realloc(p, sizeof(int) * 8); // 扩大内存到8个整数大小 if (p == NULL) { // 如果realloc失败 // 处理错误,原指针p仍然有效 } // ... 继续使用内存 free(p); return 0; } ``` 字符串操作是C语言中的基础内容,包括`strcpy`用于复制字符串,`strcat`用于连接两个字符串,`strlen`用于获取字符串长度,`strcmp`用于比较两个字符串,`strchr`用于查找子串,`strstr`用于查找一个字符串是否包含另一个字符串。例如,使用这些函数可以实现字符串的复制和比较: ```c #include <stdio.h> #include <string.h> int main(void) { char str1[50] = "Hello"; char str2[50]; strcpy(str2, str1); // 复制str1到str2 strcat(str2, ", World!"); // 在str2后添加", World!" printf("Length of str2: %zu\n", strlen(str2)); if (strcmp(str1, str2) == 0) { printf("Strings are equal.\n"); } else { printf("Strings are not equal.\n"); } return 0; } ``` 文件操作在C语言中也是必不可少的,如`fopen`用于打开文件,`fclose`用于关闭文件,`fread`和`fwrite`用于读写二进制数据,`fgetc`和`fputc`用于读写单个字符,`fgets`和`fputs`用于读写字符串,`fscanf`和`fprintf`用于格式化输入输出,`ftell`用于获取文件位置,`fseek`用于设置文件位置,`rewind`用于将文件位置设回开头。这些函数共同构成了C语言丰富的文件操作功能。 以上只是C语言参考手册中的部分内容,完整的手册还包含了更多关于算法、数值计算等方面的详细知识,是学习和掌握C语言的重要资源。