C常用函数及用法(更新中)

C语言中常用的函数可以分为以下几类:

标准函数库:包括数学函数、字符串函数、字符处理函数、文件操作函数等;
I/O函数:负责输入输出,如scanf、printf等;
存储管理函数:负责内存分配和释放,如malloc、calloc、realloc、free等;
时间和日期函数:负责获取当前时间和日期信息,如time、localtime、strftime等;
系统调用函数:负责系统调用,如read、write、open、close等。
以下是一些常用的C标准函数:

1.数学函数:sin、cos、tan、pow、sqrt、fabs

2.字符串函数:strlen、strcpy、strcat、strcmp、strstr、strtok

3.字符处理函数:isalpha、isdigit、isalnum、tolower、toupper

4.文件操作函数:fopen、fclose、fread、fwrite、fgets、fputs

I/O函数:scanf、printf、gets、puts

存储管理函数:malloc、calloc、realloc、free

时间和日期函数:time、localtime、strftime

系统调用函数:read、write、open、close等。


fabs是什么?


fabs 是 C 语言标准库中的数学函数,用于返回一个浮点数的绝对值(即取其非负值)。它的原型定义在 <math.h> 头文件中,函数签名如下:

c
double fabs(double x);
其中,x 是要求绝对值的浮点数。函数返回一个 double 类型的值,表示 x 的绝对值。

例如,fabs(-5.6) 的计算结果是 5.6,fabs(3.14) 的计算结果仍然是 3.14。无论 x 是正数、负数或零,fabs 函数都会返回非负数。

好多字打麻了


sqrt 是 C 语言标准库中的数学函数,用于计算一个数的平方根。它的原型定义在 <math.h> 头文件中,函数签名如下:

c
double sqrt(double x);
其中,x 是要进行开方运算的数字,可以是任意实数。函数返回一个 double 类型的值,表示 x 的平方根。


strcpy 是 C 语言标准库中的字符串函数,用于将一个字符串复制到另一个字符串中。它的原型定义在 <string.h> 头文件中,函数签名如下:

c
char* strcpy(char* destination, const char* source);
其中,destination 是目标字符串的指针,source 是要复制的源字符串的指针。函数返回一个 char* 类型的指针,指向目标字符串的起始位置。

注意,destination 必须具有足够的空间来容纳 source 字符串的内容,否则可能会导致缓冲区溢出的问题。

下面是一个示例代码,演示了如何使用 strcpy 函数将一个字符串复制到另一个字符串:

c
#include <stdio.h>
#include <string.h>

int main() {
    char source[] = "Hello, World!";
    char destination[20];
    
    strcpy(destination, source);
    
    printf("Source:      %s\n", source);
    printf("Destination: %s\n", destination);
    
    return 0;
}
在上述代码中,首先定义了一个字符数组 source,存储源字符串的内容。然后定义了另一个字符数组 destination,作为目标字符串的存储空间。接着调用 strcpy 函数将 source 字符串复制到 destination 字符数组中。最后使用 printf 函数分别输出源字符串和目标字符串的内容。

输出结果为:

Source:      Hello, World!
Destination: Hello, World!
可以看到,目标字符串成功地复制了源字符串的内容。

realloc 是 C 语言标准库中的内存分配函数,用于重新调整已分配内存块的大小。它的原型定义在 <stdlib.h> 头文件中,函数签名如下:

c
void* realloc(void* ptr, size_t size);
其中,ptr 是已分配内存块的指针,size 是重新调整的内存块大小。函数返回一个 void* 类型的指针,指向重新调整后的内存块起始位置。

使用 realloc 调整内存块大小时,可能存在以下几种情况:

如果 ptr 是 NULL,则 realloc 的行为等同于 malloc,会分配新的内存块。
如果 size 是 0,则 realloc 的行为等同于 free,会释放内存块并返回 NULL。
如果 ptr 不是 NULL 且 size 大于已分配内存块的大小,则会尝试扩大内存块的大小,并返回扩大后的内存块指针。
如果 ptr 不是 NULL 且 size 小于或等于已分配内存块的大小,则会缩小内存块的大小。这种情况下,realloc 可能会在原地缩小内存块,也可能会重新分配一块更小的内存块并将数据复制过去。
下面是一个示例代码,演示了如何使用 realloc 函数重新分配内存块的大小:

c
#include <stdio.h>
#include <stdlib.h>

int main() {
    int *ptr;
    
    // 初始分配内存块
    ptr = (int *)malloc(5 * sizeof(int));
    
    if (ptr == NULL) {
        printf("内存分配失败。\n");
        return 1;
    }
    
    // 输出初始内存块的地址和大小
    printf("初始内存块地址: %p\n", ptr);
    printf("初始内存块大小: %zu 字节\n", 5 * sizeof(int));
    
    // 重新调整内存块大小为 10 个 int
    ptr = (int *)realloc(ptr, 10 * sizeof(int));
    
    if (ptr == NULL) {
        printf("内存重新分配失败。\n");
        return 1;
    }
    
    // 输出重新调整后的内存块的地址和大小
    printf("重新调整后的内存块地址: %p\n", ptr);
    printf("重新调整后的内存块大小: %zu 字节\n", 10 * sizeof(int));
    
    // 释放内存块
    free(ptr);
    
    return 0;
}
在上述代码中,首先使用 malloc 函数分配了一个包含 5 个 int 值的内存块,并将其赋值给指针 ptr。然后输出初始内存块的地址和大小。接着使用 realloc 函数将内存块的大小调整为 10 个 int 值,并将返回的新内存块指针重新赋值给 ptr。最后输出重新调整后的内存块的地址和大小,并使用 free 函数释放内存块。

输出结果可能如下所示:

初始内存块地址: 0x7ffe9d85b3c0
初始内存块大小: 20 字节
重新调整后的内存块地址: 0x7ffe9d85b3c0
重新调整后的内存块大小: 40 字节
可以看到,通过 realloc 函数成功地重新调整了内存块的大小。


fgets、fputs 系统调用函数 strcat、strcmp、strstr、strtok gets、puts


fgets 和 fputs 是与文件输入输出相关的函数。
fgets(char *str, int n, FILE *stream):从文件流 stream 中读取最多 n - 1 个字符到字符串 str 中,并在读完或遇到换行符时停止,返回指向 str 的指针。
fputs(const char *str, FILE *stream):将字符串 str 写入文件流 stream 中,并在末尾添加一个换行符,返回一个非负整数。

strcat、strcmp 和 strstr 是字符串操作函数。
strcat(char *dest, const char *src):将字符串 src 连接到字符串 dest 的末尾,并返回 dest 的地址。
strcmp(const char *s1, const char *s2):比较字符串 s1 和 s2 的大小,若 s1 大于 s2,则返回正整数,若 s1 等于 s2,则返回 0,若 s1 小于 s2,则返回负整数。
strstr(const char *haystack, const char *needle):在字符串 haystack 中查找子串 needle,若找到则返回子串在 haystack 中的起始地址,否则返回 NULL。
strtok 可以将指定的字符串按照指定的分隔符进行切割,每次调用返回下一个分割出来的子串。
strtok(char *str, const char *delim):strtok 函数通过分隔符 delim 分割字符串 str。在第一次调用时,str 必须是需要分割的字符串,在后续调用中,使用 NULL 作为 str 参数即可继续分割剩余的部分。


gets 和 puts 是标准输入输出相关的函数,但是它们已经被废弃了,因为存在安全问题。建议使用 fgets 和 fputs 替代它们。


gets(char *str):从标准输入流 stdin 中读取字符串,遇到换行符或文件结束符停止,返回读取到的字符串。
puts(const char *str):将字符串 str 输出到标准输出流 stdout 中,并在末尾添加一个换行符,返回非负整数。
需要注意的是,在使用字符串操作函数时,务必注意字符串的结束符 '\0',否则可能会导致未知错误。


assert()怎么用?


在 C 语言中,assert() 是一个宏,用于在程序中进行断言检查。它的原型如下:

c
void assert(int expression);
assert() 在程序中起到断言的作用,用于判断某个表达式是否为真。如果表达式为假(即为0),则 assert() 会打印出错误信息并终止程序的执行。

下面是 assert() 的使用示例:

c
#include <assert.h>

int divide(int dividend, int divisor) {
    assert(divisor != 0);

    return dividend / divisor;
}

int main() {
    int result = divide(10, 0);

    return 0;
}
在这个示例中,我们定义了一个 divide() 函数,用于进行除法运算。在 divide() 函数内部,我们使用 assert() 来确保除数不为零。如果除数为零,assert() 将会打印出错误信息并终止程序。

在 main() 函数中,我们调用 divide() 函数并将结果赋值给 result 变量。由于除数为零,所以在执行时将触发断言错误。

需要注意的是,通常在调试阶段才会使用断言,因为断言失败会导致程序终止。在发布版本中,断言语句通常会被禁用或移除。因此,在使用断言时应谨慎选择断言条件,并确保其不会影响到程序的正常运行。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值