【常用库函数】【C语言】 目录strcpy参数返回值strcat参数返回值strlen参数返回值strstr参数返回值strtok参数返回值注意strcmp参数返回值atoi参数返回值bzero()memset()srand()和rand()strcpychar *strcpy(char *dest, const char *src)把src所指向的字符串复制到dest。参数dest-- 指向用于存储复制内容的目标数组。src-- 要复制的字符串。返回值该函数返回一个指向最终的目标字符串 dest 的指针。#include stdio.h #include stdlib.h //把str_src中的内容拷贝到str_dest中(把字符串传入新的空间中) char* string_copy(char *str_scr,char *str_dest) { int i 0; while(*str_scr ! \0) { *str_dest *str_scr; str_scr; str_dest; i; } return (str_dest-i); } int main(int argc, char const *argv[]) { char *q aabbccd; char *p NULL; p (char*)calloc(1,100); if(NULL p) { perror(calloc heap memory failed); } char *a string_copy(q,p); while(*a ! \0) { printf(%c,*a); a; } free(p); p NULL; return 0; }strcatchar *strcat(char *dest, const char *src)把src所指向的字符串追加到dest所指向的字符串的结尾。参数dest-- 指向目标数组该数组包含了一个 C 字符串且足够容纳追加后的字符串。src-- 指向要追加的字符串该字符串不会覆盖目标字符串。返回值该函数返回一个指向最终的目标字符串 dest 的指针。//strcat 函数的原型是char *strcat(char *strDest, const char *strSrc); //其中 strDest 是目的字符串strSrc 是源字符串。 //拼接字符串Dest在前Src在后 #include stdio.h #include stdlib.h #include string.h char* strcat(char *strDest,const char *strSrc)//返回一个地址 { int len strlen(strDest); for(int j 0;*(strSrc j) ! \0;j) { *(strDest len j) *(strSrc j); } return strDest; } int main(int argc, char const *argv[]) { char strdest[128] aabbcc; char *strsrc ddeeff; printf(%s\n, strcat(strdest,strsrc)); return 0; }strlensize_t strlen(const char *str)计算字符串str的长度直到空结束字符但不包括空结束字符。参数str-- 要计算长度的字符串。返回值该函数返回字符串的长度。//申请一块堆内存利用scanf函数实现通过键盘输入一个字符串并存储到堆内存中 //要求利用递归的方案实现计算字符串的实际长度并把计算结果输出到终端 // //1.定义指针来指向申请是堆内存 //1.申请一块堆内存 //2.通过键盘输入一个字符串并存储到堆内存中 //3.递归的方案实现计算字符串的实际长度 //5.释放堆内存 // #include stdio.h #include stdlib.h int func(char *ptr) { if(\0 *ptr) { return 0; } return func(ptr1)1; } int main(int argc, char const *argv[]) { char *p NULL; p (char*)calloc(1,100); if(\0 ! *p) { perror(calloc heap memory failed); } printf(input a string:); scanf(%s,p); printf(the width of string:%d\n,func(p) ); free(p); p NULL; return 0; }strstr详情strstr() 函数用于在字符串 haystack 中查找子字符串 needle 的第一次出现位置。参数haystack -- 要搜索的主字符串。needle -- 要查找的子字符串。返回值如果找到则返回指向该位置的指针如果未找到则返回 NULL。/********************************************************* * name : strstr * brief : 在字符串 haystack 中查找子字符串 needle 的第一次出现位置 * params : haystack -- 要搜索的主字符串。 * needle -- 要查找的子字符串。 *********************************************************/ #include stdio.h #include string.h int main() { const char haystack[20] RUNOOB; const char needle[10] NOOB; char *ret; ret strstr(haystack, needle); printf(子字符串是 %s\n, ret); return(0); }输出子字符串是 NOOBstrtok将字符串分割成一系列子字符串即标记或tokenchar *strtok(char *str, const char *delim)分解字符串str为一组字符串delim为分隔符。参数str: 要分割的字符串。在第一次调用时传入要分割的字符串后续调用时传入NULL表示继续分割同一个字符串。delim: 分隔符字符串。strtok()会根据这个字符串中的任意一个字符来分割str。返回值返回指向下一个标记的指针。如果没有更多的标记则返回 NULL。注意原字符串的改动是切分符原位置均更改为\0所以内容都还在/********************************************************* * name : strtok * brief : 将字符串分割成一系列子字符串 * params : str: 要分割的字符串。在第一次调用时传入要分割的字符串 * 后续调用时传入 NULL表示继续分割同一个字符串。 * delim: 分隔符字符串。 * strtok() 会根据这个字符串中的任意一个字符来分割 str。 *********************************************************/ #include string.h #include stdio.h int main() { char str[80] This is - www.123456.com - website; const char s[2] -; char *token; /* 获取第一个子字符串 */ token strtok(str, s); /* 继续获取其他的子字符串 */ while (token ! NULL) { printf(%s\n, token); token strtok(NULL, s); } printf(\n); for (int i 0; i 34;i) printf(%c, str[i]); return (0); }输出This is www.123456.com website This is www.123456.com websitestrcmpint strcmp(const char *str1, const char *str2)把str1所指向的字符串和str2所指向的字符串进行比较。两个字符串自左向右逐个字符相比按 ASCII 值大小相比较直到出现不同的字符或遇 \0 为止。参数str1-- 要进行比较的第一个字符串。str2-- 要进行比较的第二个字符串。返回值如果返回值小于 0则表示 str1 小于 str2。如果返回值大于 0则表示 str1 大于 str2。如果返回值等于 0则表示 str1 等于 str2。/********************************************************* * name : strcmp * brief : 把str1所指向的字符串和str2所指向的字符串进行比较。(按 ASCII 值大小相比较) * params : str1 -- 要进行比较的第一个字符串。 * str2 -- 要进行比较的第二个字符串。 *********************************************************/ #include stdio.h #include string.h int main () { char str1[15]; char str2[15]; int ret; strcpy(str1, abcdef); strcpy(str2, ABCDEF); ret strcmp(str1, str2); if(ret 0) { printf(str1 小于 str2); } else if(ret 0) { printf(str1 大于 str2); } else { printf(str1 等于 str2); } return(0); }输出str1 大于 str2atoiint atoi(const char *str)把参数str所指向的字符串转换为一个整数类型为 int 型。参数str-- 要转换为整数的字符串。返回值该函数返回转换后的长整数如果没有执行有效的转换则返回零。#includestdio.h #includestdlib.h int main() { char str[] -54321; int ret atoi(str); printf(%d, ret); return 0; }输出 -54321atoi函数的使用细节1.使用atoi函数需要包含stdlib.h头文件2.当参数位置传入的为NULL指针时会报错当参数位置传入的为空字符串时返回值为03.atoi函数会自动过滤开始时的空白字符4.atoi函数会根据字符串内容自动判断整数的正负5.当字符串的数字大小超过了整型数字的取值范围时返回时会变为整型数据的最大或最小值6.当字符串中的数字有非10进制字符隔断时atoi函数会直接返回当前位置前面的数字详细查看下方文章atoi函数想要彻底了解atoi函数那么看这一篇就足够了-CSDN博客char *addr NULL; printf(addr%d\n, atoi(addr));bzero()函数原型extern void bzero(void *s, int n)头文件string.h功能置字符串s的前n个字节为零且包括‘\0’说明无返回值memset()函数原型extern void *memset(void *buffer, int c, int count)头文件string.h功能把buffer所指内存区域的前count个字节设置成c的值。例程#include string.h void main(int argc, char *argv[]) { struct sockaddr_in servaddr;//套接字地址结构 bzero( servaddr, sizeof(servaddr) ); // memset( servaddr, 0, sizeof(servaddr) ); /* bzero( servaddr, 5 ); memset( servaddr, 0, 5 );//假如 0 和 5 位置记错了C编译器并不会报错参数类型相同 */ }srand()和rand()使用系统函数srand()和rand()函数自动生成随机数srand函数和rand函数是C语言中的随机数生成函数其中srand函数用于初始化随机数种子而rand函数用于生成随机数。下面是一个生成10个随机数的程序#include stdio.h #include stdlib.h #include time.h int main() { int i; // 初始化随机数种子 srand(time(NULL)); // 生成10个随机数并输出 for (i 0; i 10; i) { printf(%d , rand()); } printf(\n); return 0; }上述程序中time函数获取当前时间作为随机数种子然后将其传递给srand函数进行初始化。接着我们使用for循环生成10个随机数并使用printf函数输出。注意由于rand函数生成的随机数范围比较大因此使用 %d 格式控制符将其转换为整数输出。生成在某些范围内的随机数则只需要把rand函数每次生成的随机数对指定范围求余即可。比如生成10个在0~99范围的随机数则程序如下#include stdio.h #include stdlib.h #include time.h int main() { int i; // 初始化随机数种子 srand(time(NULL)); // 生成10个随机数并输出 for (i 0; i 10; i) { printf(%d , rand()%100); //生成的随机值对100求余的结果就是在0~99范围内 } printf(\n); return 0; }