【常用库函数】【C语言】
目录
strcpy
参数
返回值
strcat
参数
返回值
strlen
参数
返回值
strstr
参数
返回值
strtok
参数
返回值
注意
strcmp
参数
返回值
atoi
参数
返回值
bzero()
memset()
srand()和rand()
strcpy
char *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; }strcat
char *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; }strlen
size_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(ptr+1)+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
将字符串分割成一系列子字符串(即"标记"或"token")
char *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 websitestrcmp
int 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 大于 str2atoi
int atoi(const char *str)
把参数str所指向的字符串转换为一个整数(类型为 int 型)。
参数
- str-- 要转换为整数的字符串。
返回值
该函数返回转换后的长整数,如果没有执行有效的转换,则返回零。
#include<stdio.h> #include<stdlib.h> int main() { char str[] = "-54321"; int ret = atoi(str); printf("%d", ret); return 0; }输出: -54321
atoi函数的使用细节:
1.使用atoi函数需要包含<stdlib.h>头文件;2.当参数位置传入的为NULL指针时会报错,当参数位置传入的为空字符串时,返回值为0;
3.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; }