C语言常用库函数总结

1 C语言常用计算的库函数

下面的所有用例的参数赋值:

  int a = 2;
  int b = 4;
  int val = 0;

计算类函数声明在头文件#include<math.h>中;

1.1 pow() x的y次幂

函数原型:double pow(double _X,double _Y);

val = pow(a, b); // a的b次幂
printf("pow val = %d\n", val); // 16

1.2 sqrt() 计算平方根

函数原型:double sqrt(double _X);

val = sqrt(b); // 计算平方根
printf("sqrt val = %d\n", val); // 2

1.3 abs() 计算绝对值

函数原型:int abs(int _X);

val = abs(a - b); // 计算绝对值
printf("abs val = %d\n", val); // 2

1.4 fmax() 计算最大值

函数原型:double fmax(double, double);

val = fmax(a, b); // 计算最大值
printf("max val = %d\n", val); // 4

1.5 fmin () 计算最小值

函数原型:double fmin (double, double);

val = fmin(a, b); // 计算最小值
printf("min val = %d\n", val); // 2

1.6 isdigit() 判断是否为数字(char型)

该函数声明在头文件#include <ctype.h>中
函数原型:int isdigit(int _C);

val = isdigit(a); // 判断是否为数字(char型)(参数为0~9,则返回非0值,否则返回0) //判断一串字符中的阿拉伯数字
printf("isdigit1 val = %d\n", val); // 0
val = isdigit('3');
printf("isdigit2 val = %d\n", val); // 1
val = isdigit('s');
printf("isdigit3 val = %d\n", val); // 0

1.7 isalpha() 判断是否为字母(char型)

该函数声明在头文件#include <ctype.h>中
函数原型:int isalpha(int _C);

val = isalpha(a); // 判断是否为字母(char型)(若为英文字母,则返回非0值(大写为1,小写为2),否则返回0) //判断一串字符中的阿拉伯数字
printf("isalpha1 val = %d\n", val); // 0
val = isalpha('A');
printf("isalpha2 val = %d\n", val); // 1
val = isalpha('a');
printf("isalpha3 val = %d\n", val); // 2

2 C语言常用内存操作的库函数

2.1 memset() 内存赋值函数

该函数声明在头文件#include <string.h>中
函数原型:void *memset(void *_Dst,int _Val,size_t _Size);

该函数作用是对于某一段内存空间全部设置称为某个字符,一般在对定义的字符串中进行初始化为’ ’或’\0’,也可以方便的清空一个结构类型的变量或数组。

int arr1[3] = {1, 2, 3};
memset(arr1, 0, sizeof(int) * 3); // arr1: 0 0 0 //给数组arr1的每个元素赋值为0

2.1 memcpy() 复制内存块

该函数声明在头文件#include <string.h>中
函数原型:void * memcpy(void * restrict _Dst,const void * restrict _Src,size_t _Size);

char arr2[10] = "shn123";
char str2[10] = {0};
memcpy(str2, arr2, sizeof(char) * 10);
printf("str2 = %s\n", str2); //str2 = shn123

int arr3[10] = {1, 2, 3, 4, 5, 6, 7};
int arr4[10] ={0};
memcpy(arr4, arr3, sizeof(int) * 10); 
for (i = 0; i < 10; i++) {
    printf("%d ", arr4[i]);// arr4: 1 2 3 4 5 6 7 0 0 0
}

3 C语言常用字符串的库函数

字符串操作类标准函数声明在头文件#include<string.h>中;

3.1 strlen()函数

函数原型:size_t strlen(const char *s)
用于统计字符串的长度,返回s字符串中的字符数,但不包括末尾的空字符‘\0’。

3.2 拼接字符串:strcat()

函数原型:char *strcat(char *s1, const char *s2)

这个函数接收两个字符串指针做为参数,然后把两者拼接起来并返回拼接结果的指针。把第二个字符串拼接到第一个的结尾,第二个字符串是以常量char指针的形式传递,函数不会 分配内存,因此第一个字符串必须足够长,能够容纳拼接后的结果。函数的返回值地址和第一个参数的地址一样。

注意:第一个字符串s1不能为空,s2的第一个字符会会覆盖s1中结束符‘\0’。
不合法使用用例:

char error[] = “505”;
char errorMassage[] = “shi hao nan”;
error = strcat(error, errorMassage);//操作错误,把函数返回的指针赋值给数组的名字,这类操作不合法

3.3 拼接字符串:strncat()

函数原型:char *strncat(char *s1, const char *s2, size_n)

例如:strncat(str1,str2,10); 
//拷贝arr2中的10个字符在arr1中,并在拷贝字符的末尾加一个结束符‘\0’。

注意:size_n为最大添加字符数(不管空字符),加到第10个字符或者遇到空字符‘\0’时停止。

3.4 比较字符串:strcmp()

函数原型:int strcmp(const char *s1, const char *s2)

用于比较两个字符串的内容,会依次进行比较每个字符,直到发现第一个不同为止,注意比较所有的字符(ASCII值进行比较),不只是字母。要比较的两个字符串都以指向char常量的指针的形式传递,不用担心传入的字符串被修改。
函数返回值:负数:按照字母序,s1比s2小就返回负数;0:两个字符串相等就返回0;整数:按照字母序,s1比s2大就返回正数;

strcmp(“A”, “B”);//返回-1

使用错误实例:

scanf(“%S”,command);
if(command = “quit”) //导致错误,不能把字符串的字面量地址赋值给数组的名字
if(command == “quit”) //导致错误,因为比较的是command的地址(200)和字符串字面量的地址(600),相等操作符比较的是地址,而不是地址中的内容,用数组名字或者字符串的字面量就会返回地址。

3.5 比较字符串:strncmp()

函数原型:int strncmp(const char *s1, const char *s2, size_n)
用于比较前参数指定的字符。
例如:

strncmp(name, arr, 5);
//在比较5个字符或者遇到第一个空字符‘\0’时停止比较。

3.6 复制字符串:strcpy()

函数原型:char *strcpy(char *s1, const char *s2)

用于拷贝字符串,例如:strcpy(str1, str2);//第二个参数拷贝到第一个参数
注意:从首地址开始,第一个参数原数据会被全覆盖,并且把第二个参数中的空字符也拷贝在内。(会先把第一个字符串清零,然后复制第二个字符串);
内部实现方法:
1)用一个很长的char数组读入字符串;
2)用malloc分配刚好可以容纳字符串的适量内存;
3)用strcpy把字符串复制到动态分配的内存中。
注意:两个指针可以引用同一个字符串,两个指针引用同一个地址称之为别名。把一个指针赋值给另一个指针不会复制字符串,只是复制了字符串的地址。
例如:

char *pArr[100];//指针数组
pArr[12] = “this is book”;
pArr[13] = pArr[12];

3.7 复制字符串:strncpy()

函数原型:char *strncpy(char *s1, const char *s2, size_n)

第3个参数可指明拷贝的最大字符数,注意不会覆盖原来的数据。直接从首地址开始覆盖。
例如1:

strncpy(str1, str2, 10);//返回值为第一个参数
//注意:str1要记得加结束符‘\0’!!!!!!重!

例如2:

char str1[20] = "123456";
char str2[10] = "shn";
strncpy(str1+strlen(str1), str2, strlen(str2)); //返回值为第一个参数
str1[9]= '\0';
printf("%s  \n",str1);//123456shn
strcpy(str1, str2);
printf("%s  \n",str1);//shn

3.8 sprintf()函数

函数原型:sprintf (char*, const char*, …);
把数据写入字符串,该函数声明在stdio.h中。
例如:

char shn_info[50] = {0};
char name[] = "shn";
int id = 456;
int age = 26;
sprintf(shn_info,"name = %s, id = %d, age = %d", name, id, age);
printf("shn_info: %s\n",shn_info);// shn_info:name = shn, id = 456, age = 26
//注意:shn_info为目标字符串地址,会先把shn_info字符串中的数据清空,然后把结合后的字符串存储在字符串shn_info中。

3.9 查找字符串中的字符:strchr()

函数原型:char *strchr(const char *s1, int c)

如果s1字符串包含c字符,该函数就会返回s1字符串中首次出现c字符的指针,如果在s1字符串中没有找到c字符,该函数就会返回空指针。
例如:

char shn_info[50] = “name = shn, id = 456, age = 26”;
char *p = strchr(shn_info,'e');
printf("ch = %c\n",*p);//ch = e

3.10 strpbrk()函数

函数原型:char *strpbrk(const char *s1, const char *s2)
该函数作用:s1字符包含s2字符串中的任意字符,该函数返回指向s1字符串中首位置的指针,如果s1中没有找到s2的字符串中的字符,则返回空字符。
例如:

char shn_info[50] = “name = shn, id = 456, age = 26”;
char *p = strpbrk (shn_info,”jzde”);
printf("ch = %c\n",*p);//ch = e

3.11 strrchr()函数

函数原型:char *strrchr(const char *s1, int c)
该函数返回s字符串中c字符最后一次出现的位置指针,末尾的空字符也是字符串的一部分,也在查找范围内。若未找到c字符,则返回空指针。
例如:

char shn_info[50] = “name = shn, id = 456, age = 26”;
char *p = strrchr(shn_info,'a');
printf(" %c%c \n",*p, *(p+1));//ag

3.12 strstr ()函数

函数原型:char *strstr(const char *s1, const char *s2)
该函数返回指向s1字符串中s2字符串出现的首位置指针。若未找到s2字符串,则返回空指针。
例如:

char shn_info[50] = “name = shn, id = 456, age = 26”;
char *p = strstr (shn_info, "id");
printf(" %c%c \n",*p, *(p+1));//id

3.13 strtok_s()函数

strtok_s是windows下的一个分割字符串安全函数,其函数原型如下:
char *strtok_s( char *strToken, const char *strDelimit, char **buf);
这个函数将剩余的字符串存储在buf变量中,而不是静态变量中,从而保证了安全性。
例如:

int Pro(char *s)
{
    char *p = NULL;
    char *pTmp = NULL;
    char *buf[20];
    int k = 0;
    pTmp = strtok_s(s, ",", &p);
    while (pTmp != NULL) {
        buf[k++] = pTmp;
        pTmp = strtok_s(NULL, ",", &p); // 注意使用
    }
    
    int i = 0;
    for (i = 0; i < k; i++) {
        printf("%s\n", buf[i]);
    }
    
    return 0;
}

int main(void)
{
    int n;
    char str[30] = "12,34,56,78,9";
    Pro(str);
    printf("str = %s", str);
    system("pause");
    return 0;
}

运行结果如下:

12
34
56
78
9
str = 12请按任意键继续. . .

【总结分享和大家共同进步】

若存在错误之处,欢迎批评指正,若有收获,欢迎关注点赞~

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2023年12月12日
下一篇 2023年12月12日

相关推荐