C基础知识(13):内存管理

时间:2023-02-14 15:37:05

如果事先不知道数组的具体长度,则需要动态分配内存。下面是例子。

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 
 5 int main() {
 6     // 如果预先不知道需要存储的文本长度,则需要定义一个指针,后续再根据需求来分配内存
 7     char *str;
 8     // 在内存中动态地分配num个长度为size的连续空间,并将每一个字节都初始化为0
 9     str = malloc(30 * sizeof(char)); // 或 str = calloc(200, sizeof(char));
10     if (str == NULL) {
11         fprintf(stderr, "Error - unable to allocate required memory\n");
12     } else {
13         strcpy(str, "I'm a Java programmer.");
14     }
15     // 假设存储更大的描述信息要使用realloc,该函数重新分配内存,把内存扩展到newsize(50)
16     str = realloc(str, 100 * sizeof(char));
17     if (str == NULL) {
18         fprintf(stderr, "Error - unable to allocate required memory\n");
19     } else {
20         strcat(str, " But I have to learn C (TT)!");
21     }
22     printf("%s\n", str); // I'm a Java programmer. But I have to learn C (TT)!
23     // 使用 free() 函数释放内存
24     free(str);
25 
26     return 0;
27 }