1,fwrite函数
`fwrite` 是 C 语言标准库中的一个函数,它用于向文件写入数据。这个函数定义于头文件 `<stdio.h>` 中。
函数原型如下所示:
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
参数解释:
`const void *ptr`:指向要写入的数据的指针。
`size_t size`:每次写入操作要处理的元素大小(以字节为单位)
`size_t nmemb`:要写入的元素数量。
`FILE *stream`:指向 `FILE` 结构的指针,该结构表示一个打开的文件。
返回值:
- 成功时,返回写入的元素总数。
- 失败时,返回0。
`fwrite` 函数会将 `nmemb` 个大小为 `size` 字节的元素从 `ptr` 指向的内存位置复制到与 `stream` 关联的文件中。如果写入成功,`fwrite` 返回写入的元素数量;如果发生错误或者到达文件结尾,则返回0。
使用 `fwrite` 时应确保目标文件已经以写入模式(如 "w"、"wb"、"a"、"ab")打开,否则可能导致运行时错误。此外,在写入大量数据或进行多次写入操作时,应检查 `fwrite` 的返回值,以便及时发现并处理可能出现的问题。
//使用代码示例如下:
if (fwrite(&move->student, sizeof(Student), 1, file) != 1)
{
printf("写入失败\n");
return;
}
2,fread函数
`fread` 是 C 语言标准库中的一个函数,它用于从文件读取数据。这个函数定义于头文件 `<stdio.h>` 中。
函数原型如下:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
参数解释:
- `void *ptr`:指向存储已读取数据的指针。
- `size_t size`:每次读取操作要处理的元素大小(以字节为单位)。
- `size_t nmemb`:要读取的元素数量。
- `FILE *stream`:指向 `FILE` 结构的指针,该结构表示一个打开的文件。
返回值:
- 成功时,返回读取的元素总数。
- 失败时,返回0。
`fread` 函数会从与 `stream` 关联的文件中读取 `nmemb` 个大小为 `size` 字节的元素,并将这些元素复制到 `ptr` 指向的内存位置。如果读取成功,`fread` 返回读取的元素数量;如果发生错误或者到达文件结尾,则返回0。
使用 `fread` 时应确保目标文件已经以读取模式(如 "r"、"rb")打开,否则可能导致运行时错误。此外,在读取大量数据或进行多次读取操作时,应检查 `fread` 的返回值,以便及时发现并处理可能出现的问题。
3,_getch()函数
_getch()函数主要用于读取用户的输入,而不会在控制台上显示输入的内容。它是在`<conio.h>`头文件中定义的。
基本用法:
#include <stdio.h>
#include <conio.h>
int main(void) {
char key;
while ((key = _getch()) != '\r') {
if (i <= 15) {
passward[i++] = key;
printf("*");
} else {
printf("密码过长,请按任意键重新输入正确的密码!\n");
i = 0;
key = getchar();
system("cls");
}
}
return 0;
}
在上述代码中,`_getch()`函数用于读取用户的输入,如果输入的不是换行符('\r'),则将其存储在数组`passward`中,并打印一个星号("*")以隐藏输入的字符。如果输入的字符数超过15个,则清空数组,提示用户重新输入密码
在使用`_getch()`函数时,需要注意以下几点:
1. `_getch()`函数只能读取一个字符,如果需要读取多个字符,可以使用循环。
2. `_getch()`函数不会等待用户输入,它会立即返回用户输入的第一个字符。
3. `_getch()`函数不会显示用户输入的字符,这对于需要隐藏用户输入的场景非常有用,比如输入密码。
4. `_getch()`函数在Windows系统下的控制台环境中才能正常工作,在其他环境下可能无法正常工作
另外,需要注意的是,`_getch()`函数在一些编译器中可能已经被废弃,建议使用`_getchar()`函数代替
4,system()函数
system()函数通常用于在编程语言中执行外部命令或程序。它允许程序执行一些不在其自身范围内的操作,例如执行其他程序或脚本,或者执行系统的命令。
在C语言中,`system()`函数的原型为 `int system(const char *command)`,其中 `command` 参数是一个包含要执行的命令或程序的字符串。
使用方法:
`system()`函数的使用方法相对简单,只需要将要执行的命令作为参数传入即可。例如,如果你想执行一个简单的`echo`命令打印一条信息,你可以这样写:
#include <stdio.h>
#include <stdlib.h>
int main() {
system("echo Hello, World!");
return 0;
}
在这个例子中,`system("echo Hello, World!");`将会执行`echo Hello, World!`这条命令,然后在控制台上输出`Hello, World!`这条信息。
**注意事项**
在使用`system()`函数时,需要注意以下几点:
1. `system()`函数会在执行完命令后立即返回,即使命令还在执行。这意味着你不能确保命令何时完成。
2. 在Windows系统中,`system()`函数会直接在控制台执行命令;而在Unix/Linux系统中,`system()`函数会通过`fork`函数生成一个新的子进程来执行命令,命令执行完成后,子进程会被销毁,父进程会立即返回。
3. `system()`函数的返回值为命令的退出状态码。如果命令成功执行,返回0;如果命令执行失败,返回-1。
此外,`system()`函数也可以用来执行一些常见的DOS命令,如`assoc`、`attrib`、`break`、`cacls`等
5,malloc函数
malloc()`函数是C语言中的一个动态内存分配函数,它的全称是Memory Allocate,用于在堆上动态地分配内存。
5.1函数原型
`malloc()`函数的函数原型为:
void *malloc(size_t size);
其中,`size_t`是一个无符号整数类型,通常为`unsigned long`或`unsigned int`。`size`参数是你要分配的内存大小,单位是字节。
使用方法:
使用`malloc()`函数时,你需要包含头文件`<stdlib.h>`或`<malloc.h>`。然后,你可以将`malloc()`函数应用于某个指针,如下所示:
int *ptr;
ptr = (int *)malloc(sizeof(int) * 10);
上述代码将为整数类型的指针`ptr`分配10个整数大小的内存空间。
注意事项
在使用`malloc()`函数时,需要注意以下几点:
1. `malloc()`函数返回的是一个`void *`类型的指针,也就是说,它返回的是一个未确定类型的指针。在使用时,通常需要进行类型转换,例如`(int *)`表示将`void *`类型的指针转换为`int *`类型的指针。
2. `malloc()`函数分配的内存空间并不会自动初始化为0,其内容是未知的。
3. 如果`malloc()`函数分配内存失败,例如由于内存不足等原因,它将返回`NULL`。因此,在使用`malloc()`函数后,应该总是检查其是否成功,避免访问非法内存。
4. 当你不再需要使用`malloc()`函数分配的内存时,应当使用`free()`函数释放这块内存。`free()`函数的用法将在后续介绍。
5. `malloc()`函数分配的内存空间是在堆上分配的,生命周期并不会随着函数的结束而结束,需要程序员自行管理。
6. `malloc()`函数分配的内存空间默认是不对齐的,如果需要对齐的内存,可以使用`aligned_alloc()`函数
6,free()函数
`free()`函数是C语言中的一个动态内存释放函数,用于释放之前通过`malloc()`、`calloc()`或`realloc()`函数在堆上动态分配的内存。
函数原型
void free(void *ptr);
其中,`ptr`参数是指向你要释放的内存的指针。
## 使用方法
使用`free()`函数时,你需要包含头文件`<stdlib.h>`或`<malloc.h>`。然后,你可以将`free()`函数应用于某个指针,如下所示:
int *ptr;
ptr = (int *)malloc(sizeof(int) * 10);
// 使用完后释放内存
free(ptr);
在上述代码中,`ptr`是通过`malloc()`函数动态分配的内存,`free(ptr)`语句将释放这块内存。
## 注意事项
在使用`free()`函数时,需要注意以下几点:
1. `free()`函数只能用于释放通过`malloc()`、`calloc()`或`realloc()`函数动态分配的内存,不能用于释放其他类型的内存,例如静态分配的内存或全局变量。
2. `free()`函数释放的是指针指向的内存,而不是指针本身。释放后,指针仍然存在,但指向的内存变为未定义,如果再次尝试访问这块内存,可能会导致程序崩溃或其他未知行为。
3. 当你不再需要使用`malloc()`函数分配的内存时,应当使用`free()`函数释放这块内存。如果不这样做,可能会导致内存泄漏。
4. 对于同一块内存,不能多次调用`free()`函数。每次调用`free()`函数后,指针就不再指向有效的内存,如果再次使用这个指针,可能会导致程序崩溃或其他未知行为。
5. 释放内存后,最好将指针设置为`NULL`,以防止在将来误用这个已经无效的指针。
6. `free()`函数并不负责回收物理内存,而是更新内存管理的数据结构,让操作系统知道这部分内存可以被重新使用。
7. 使用`free()`函数释放内存后,原指针仍然存在,只是指向的内存变为未定义,因此,释放内存后,原指针不能再使用,否则可能导致程序崩溃
7,exit()函数
`exit()`函数是C语言中的一个系统调用的函数,用于终止当前正在执行的进程。
`exit()`函数的函数原型为:
void exit(int status);
其中,`status`参数是程序退出的状态码,通常为0表示正常退出,非0表示异常退出。
## 使用方法
使用`exit()`函数时,你需要包含头文件`<stdlib.h>`或`<unistd.h>`。然后,你可以将`exit()`函数应用于某个语句,如下所示:
exit(0);
上述代码将正常结束程序。
## 注意事项
在使用`exit()`函数时,需要注意以下几点:
1. `exit()`函数会立即终止当前进程,并且关闭所有打开的文件描述符。
2. `exit()`函数的参数`status`会被传递给父进程,以供其他程序使用。
3. 在`main`函数中使用`return`和`exit`的效果基本相同,但在非`main`函数中调用`return`和`exit`的效果明显不同。
4. `exit()`函数是系统级别的,它表示了一个进程的结束,而`return`是语言级别的,它表示了函数的返回。
5. `exit()`函数是C语言提供的,而`return`是C语言提供的,而`exit`是操作系统提供的(或者函数库中给出的)。
6. `exit()`函数用于结束整个应用程序,删除进程使用的内存空间,并将应用程序的一个状态返回给操作系统,这个状态标识了应用程序的一些运行信息,这个信息和机器和操作系统有关,一般是0为正常退出,非0为非正常退出