关于学生信息系统的几个补充知识

本文详细介绍了C语言中的几个重要函数:fwrite用于文件写入,fread用于文件读取,_getch_用于隐藏式读取用户输入,system用于执行外部命令,malloc和free用于动态内存管理,以及exit用于进程终止。每个函数的用法、参数和注意事项都进行了说明。
摘要由CSDN通过智能技术生成

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为非正常退出

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值