以下代码为字符数组分配 256 个字节,然后用
\0
替换空格(类似于 strtok
和 strsep
的做法)。
#include <stdlib.h>
#include <string.h>
int main() {
char *long_one = (char *)malloc(sizeof(char) * 256);
strcpy(long_one, "Nutrition Facts");
*(long_one+9) = '\0';
free(long_one);
return 1;
}
第 8 行中的
free
是否释放所有 256 个字节,还是仅释放直到并包括 \0
的字节?
free
不会将内存视为以 null 结尾的字符串,所以是的,它会释放 malloc
分配的所有内存。
补充说明:
malloc
。相关阅读:我应该强制转换 malloc 的结果(在 C 中)吗?sizeof(char)
是 1
,因此您可以将 256
传递给 malloc
。malloc
是否成功。*(long_one+9) = '\0';
等效且更易读地写为:long_one[9] = '\0';
char long_one[256];
return 1;
表示程序因错误而退出。您可以选择三个选项:return 0;
; return EXIT_SUCCESS;
或者只是不明确返回任何内容。如果没有显式返回值,则 main
函数会隐式返回 0
。如果 free 不会通过
malloc
释放所有分配的内存,那么如何处理例如用零初始化分配的内存的 calloc
?:)
此外,由于
malloc
不会初始化分配的内存,因此分配的内存可以包含任何垃圾,包括零。再说一次,在这种情况下该怎么办?:)
分配的内存大小在内部存储,并在释放分配的内存时使用。