stdlib.h介绍
stdlib.h 是 C 语言的标准库头文件,它包含了许多与内存分配、随机数生成、字符串转换和其他常用函数相关的函数原型和宏定义。
内存管理函数
- malloc():用于分配指定字节数的内存空间。
void* malloc(size_t size);
其中,
size
参数表示要分配的内存大小(以字节为单位)。malloc
函数会尝试在堆上分配足够大小的内存块,并返回一个指向该内存块的指针。如果分配成功,则返回的指针是有效的;如果分配失败,则返回NULL
。
#include
#include
int main() {
int* ptr;
int num_elements = 5;
// 动态分配具有 5 个 int 元素的内存空间
ptr = (int*)malloc(num_elements * sizeof(int));
if (ptr != NULL) {
// 分配成功,使用分配的内存空间
for (int i = 0; i num_elements; i++) {
ptr[i] = i + 1;
}
// 打印数组元素
for (int i = 0; i num_elements; i++) {
printf("%d ", ptr[i]);
}
// 释放内存空间
free(ptr);
} else {
// 分配失败
printf("内存分配失败n");
}
return 0;
}
-
calloc():用于分配指定数量的元素,并将它们初始化为零。它类似于
malloc
函数,但在分配内存后会将分配的内存空间初始化为零值。
void* calloc(size_t num, size_t size);
其中,
num
参数表示要分配的元素数量,size
参数表示每个元素的大小(以字节为单位)。calloc
函数会尝试在堆上分配足够大小的内存块,并将其初始化为零。然后,它会返回一个指向该内存块的指针。如果分配成功,则返回的指针是有效的;如果分配失败,则返回NULL
。
#include
#include
int ma服务器托管网in() {
int* ptr;
int num_elements = 5;
// 分配具有 5 个 int 元素的内存空间,并初始化为零
ptr = (int*)calloc(num_elements, sizeof(int));
if (ptr != NULL) {
// 分配成功,使用分配的内存空间
for (int i = 0; i num_elements; i++) {
printf("%d ", ptr[i]);
}
// 释放内存空间
free(ptr);
} else {
// 分配失败
printf("内存分配失败n");
}
return 0;
}
-
realloc():用于重新分配已分配内存的大小。它可以修改之前由
malloc
、calloc
或realloc
分配的内存块的大小。
void* realloc(void* ptr, size_t size);
其中,
ptr
是之前分配的内存块的指针,size
是重新分配的大小(以字节为单位)。realloc
函数会尝试重新分配大小为size
的内存块,并返回一个指向新分配内存的指针。如果分配成功,则返回的指针是有效的;如果分配失败,则返回NULL
。
#include
#include
int main() {
int* ptr;
int num_elements = 5;
// 分配具有 5 个 int 元素的内存空间
ptr = (int*)malloc(num_elements * sizeof(int));
if (ptr != NULL) {
// 分配成功,使用分配的内存空间
for (int i = 0; i num_elements; i++) {
ptr[i] = i + 1;
}
// 打印数组元素
for (int i = 0; i num_elements; i++) {
printf("%d ", ptr[i]);
}
// 重新分配内存大小为 10 个 int 元素
int new_num_elements = 10;
ptr = (int*)realloc(ptr, new_num_elements * sizeof(int));
if (ptr != NULL) {
// 重新分配成功,继续使用分配的内存空间
for (int i = num_ele服务器托管网ments; i new_num_elements; i++) {
ptr[i] = i + 1;
}
// 打印重新分配后的数组元素
for (int i = 0; i new_num_elements; i++) {
printf("%d ", ptr[i]);
}
} else {
// 重新分配失败
printf("内存重新分配失败n");
}
// 释放内存空间
free(ptr);
} else {
// 分配失败
printf("内存分配失败n");
}
return 0;
}
-
free():用于释放之前分配的内存空间。它用于将之前由
malloc
、calloc
或realloc
分配的内存返回给系统,以便供其他程序使用。
void free(void* ptr);
其中,
ptr
是指向要释放的内存块的指针。通过调用free
函数,可以将该内存块释放回系统。
#include
#include
int main() {
int* ptr;
int num_elements = 5;
// 动态分配具有 5 个 int 元素的内存空间
ptr = (int*)malloc(num_elements * sizeof(int));
if (ptr != NULL) {
// 分配成功,使用分配的内存空间
for (int i = 0; i num_elements; i++) {
ptr[i] = i + 1;
}
// 打印数组元素
for (int i = 0; i num_elements; i++) {
printf("%d ", ptr[i]);
}
// 释放内存空间
free(ptr);
} else {
// 分配失败
printf("内存分配失败n");
}
return 0;
}
随机数函数
-
rand():生成一个伪随机数。它可以用于生成范围在
0
到RAND_MAX
之间的整数。
int rand(void);
#include
#include
#include
int main() {
// 设置随机数种子
srand(time(NULL));
// 生成随机数
int random_number = rand();
printf("随机数: %dn", random_number);
return 0;
}
-
srand():用于设置随机数生成器的种子。它作用于
rand
函数,可以通过设置不同的种子值来产生不同的伪随机数序列。
void srand(unsigned int seed);
#include
#include
#include
int main() {
// 设置随机数种子为固定值 42
srand(42);
// 生成随机数
int random_number = rand();
printf("随机数: %dn", random_number);
return 0;
}
在上述代码中,我们调用
srand(42)
来设置随机数种子为固定值42
。这意味着每次运行程序时,通过调用rand 函数
生成的随机数序列都是相同的。
字符串转换函数
-
atoi():将字符串转换为整数。
atoi
函数会忽略字符串中的空白字符,然后将有效的数字部分转换为整数。
int atoi(const char* str);
其中,
str
是一个以null
结尾的字符串,表示要转换为整数的输入字符串。
#include
#include
int main() {
const char* str = "12345";
int number = atoi(str);
printf("转换后的整数: %dn", number);
return 0;
}
在上述代码中,我们将字符串
"12345"
赋给str
变量,并使用atoi 函数
将其转换为整数。转换后的整数值存储在number
变量中。
如果字符串无法转换为有效的整数,atoi 函数
将返回0
。此外,atoi 函数
没有提供错误检查机制,因此在使用atoi 函数
之前,应确保输入字符串符合要求,否则可能导致不可预测的结果。
-
atof():将字符串转换为浮点数。
atof 函数
会忽略字符串中的空白字符,然后将有效的数字部分转换为浮点数。
double atof(const char* str);
其中,
str
是一个以null
结尾的字符串,表示要转换为浮点数的输入字符串。
#include
#include
int main() {
const char* str = "3.14";
double number = atof(str);
printf("转换后的浮点数: %fn", number);
return 0;
}
在上述代码中,我们将字符串
"3.14"
赋给str
变量,并使用atof 函数
将其转换为浮点数。转换后的浮点数值存储在number
变量中。
如果字符串无法转换为有效的浮点数,atof
函数将返回0.0
。此外,atof 函数
没有提供错误检查机制,因此在使用atof 函数
之前,应确保输入字符串符合要求,否则可能导致不可预测的结果。
-
itoa():将整数转换为字符串。
itoa
并不是标准库函数。itoa
是一个非标准的函数,它在某些编译器和库中提供,用于将整数转换为对应的字符串表示。
#include
int main() {
int number = 12345;
char str[20];
sprintf(str, "%d", number);
printf("转换后的字符串: %sn", str);
return 0;
}
在上述代码中,我们将整数
12345
赋给number
变量,并声明一个足够大的字符数组str
作为字符串缓冲区。
如果您需要更灵活和安全的整数转换到字符串的方法,可以考虑使用第三方库,如 libcurl
或 glib
中提供的函数。
环境控制函数
- system():是一个标准库函数,用于执行操作系统命令。它允许在程序中调用外部命令,并在操作系统中执行该命令。
int system(const char* command);
其中,
command
是一个以null
结尾的字符串,表示要执行的命令。
#include
#include
int main() {
const char* command = "ls -l";
int result = system(command);
if (result == -1) {
printf("命令执行失败n");
} else {
printf("命令执行成功n");
}
return 0;
}
我们将字符串
"ls -l"
赋给command
变量,表示要执行的命令是列出当前目录的详细信息。
system 函数
的使用可能因操作系统而异。在不同的操作系统上,system 函数
可能有不同的行为和限制。此外,使用 system 函数
时应注意潜在的安全风险,尤其是在接受用户输入的情况下,应避免直接将用户提供的字符串作为命令参数传递给 system 函数
,以防止命令注入等安全问题。
其他函数
- exit():用于终止程序的执行并返回到操作系统。
- abs():返回一个整数的绝对值。
- labs():返回一个长整数的绝对值。
此外,stdlib.h
还定义了一些宏,如 NULL(表示空指针)
和 EXIT_SUCCESS
、EXIT_FAILURE
(表示程序成功或失败的退出状态)。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net