常用的C标准库函数
整理常见的C标准库函数。会不断更新。
- strcpy
- sprintf
- puts
- memset
- snprintf
- printf
- malloc
- realloc
- strcat
- strstr
strcpy
char *strcpy(char *dest, const char *src)
把 src 所指向的字符串复制到 dest,返回一个指向最终的目标字符串 dest 的指针。
#include <stdio.h>
#include <string.h>
int main()
{
char src[40];
strcpy(src, "This is runoob.com");
printf("最终的目标字符串: %s\n", src);
return(0);
}
最终的目标字符串: This is runoob.com
sprintf
int sprintf(char *str, const char *format, ...)
- str -- 这是指向一个字符数组的指针,该数组存储了 C 字符串。
- format -- 格式化后的字符串
把格式化后的字符串存储到到 str 所指向的字符串。
如果成功,则返回写入的字符总数,不包括字符串追加在字符串末尾的空字符。如果失败,则返回一个负数。
#include <stdio.h>
#include <math.h>
int main()
{
char str[80];
sprintf(str, "Pi 的值 = %f", M_PI);
puts(str);
return(0);
}
Pi 的值 = 3.141593
puts
int puts(const char *str) // str -- 这是要被写入的 C 字符串
把一个字符串写入到标准输出 stdout,直到空字符,但不包括空字符。换行符会被追加到输出中。
如果成功,该函数返回一个非负值为字符串长度(包括末尾的 \0),如果发生错误则返回 EOF。
#include <stdio.h>
#include <string.h>
int main()
{
char str1[15];
char str2[15];
strcpy(str1, "BEIJING");
strcpy(str2, "SHANGHAI");
puts(str1);
puts(str2);
return(0);
}
BEIJING
SHANGHAI
memset
void *memset(void *str, int c, size_t n)
复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。
注意:要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。
该值返回一个指向存储区 str 的指针。
#include <stdio.h>
#include <string.h>
int main ()
{
char str[50];
strcpy(str,"This is string.h library function");
puts(str);
memset(str,'$',7);
puts(str);
return(0);
}
This is string.h library function
$$$$$$$ string.h library function
snprintf
int snprintf ( char * str, size_t size, const char * format, ... );
设将可变参数(...)按照 format 格式化成字符串,并将字符串复制到 str 中,size 为要写入的字符的最大数目,超过 size 会被截断.
参数含义:
str -- 目标字符串,size -- 拷贝字节数(Bytes),format -- 格式化成字符串,... -- 可变参数.
返回值含义:
1.如果格式化后的字符串长度小于 size,则会把字符串全部复制到 str 中,并给其后添加一个字符串结束符 \0.
2.如果格式化后的字符串长度大于等于 size,超过 size 的部分会被截断,只将其中的 (size-1) 个字符复制到 str 中,并给其后添加一个字符串结束符 \0,返回值为欲写入的字符串长度.
示例:
#include <stdio.h>
int main()
{
char buffer[50];
char* s = "runoobcom";
// 读取字符串并存储在 buffer 中
int j = snprintf(buffer, 6, "%s\n", s);
// 输出 buffer及字符数
printf("string:\n%s\ncharacter count = %d\n", buffer, j);
return 0;
}
string:
runoo
character count = 10
printf
- %p会把值作为一个地址输出。
int i=0; printf("%p",&i); 执行结果: 0xbffb2d6a 。%p是将&i这个值作为地址输出,并以0x开头16进制类型输出出来
- %u对int型和unsigned int型都可以,表示输入输出格式为无符号int型。
int a=-1; unsigned int b ;
b=a; printf("%d\t %u\t %d\t %u",a,a,b,b); \\ \t是制表符,
执行结果:-1 4294967295 -1 4294967295
- %lu对unsigned long型,无符号长整数型
malloc
void *malloc(size_t size)
函数说明: 分配所需的内存空间,并返回一个指向它的指针.
参数说明: size: 内存块的大小,以 字节 为单位。
返回值说明: 返回一个void指针,如果分配失败,返回 NULL。
示例:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char *c;
c = (char*)malloc(sizeof(char));
strcpy(c,"helloworld");
printf("c = %s.",c);
free(c);
return 0;
}
realloc
void *realloc(void *ptr, size_t size)
函数说明: 尝试重新调整之前调用 malloc 或 calloc 所分配的 ptr 所指向的内存块的大小.
参数说明:
- ptr: 指针指向一个要重新分配内存的内存块,该内存块之前是通过调用 malloc、calloc 或 realloc 进行分配内存的。如果为空指针,则会分配一个新的内存块,且函数返回一个指向它的指针.
- size: 内存块的新的大小,以字节为单位。如果大小为 0,且 ptr 指向一个已存在的内存块,则 ptr 所指向的内存块会被释放,并返回一个空指针.
返回值说明:
该函数返回一个指针 ,指向重新分配大小的内存。如果请求失败,则返回 NULL.
示例:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char *c;
c = (char*)malloc(sizeof(char));
strcpy(c,"helloworld");
printf("malloc c = %s.\n",c);
c = (char*)realloc(c,2 * sizeof(char));
strcat(c,"+hellobeijing");
printf("realloc c = %s.\n",c);
free(c);
return 0;
}
malloc c = helloworld.
realloc c = helloworld+hellobeijing.
strcat
char *strcat(char *dest, const char *src)
函数说明: 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾.
参数说明:
- dest: 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串.
- src: 指向要追加的字符串,该字符串不会覆盖目标字符串.
返回值:
该函数返回一个指向最终的目标字符串 dest 的指针.
示例:
同上一个示例.
strstr
char *strstr(const char *haystack, const char *needle)
C 库函数 char *strstr(const char *haystack, const char *needle) 在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 '\0'其中haystack是要被检索的 C 字符串,needle是在 haystack 字符串内要搜索的小字符串。该函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null。参数和返回值都是指针类型。
#include <stdio.h>
#include<string.h>
int main()
{
const char* p1 = "abcdefgh";//"abcdefgh"是常属性字符串,里面的内容无法被改变,在char*前加const
const char* p2 = "def";
const char* p3 = "hello";
char* ret = strstr(p1, p2);//把返回的字符串首地址赋给ret
char* ret1 = strstr(p1, p3);//把返回的字符串首地址赋给ret
if (ret == NULL)
{
printf("ret = 子串不存在\n");//当返回的字符串首地址为空,ret为一个空指针,代表不存在该子串
}
else
{
printf("ret = %s\n", ret);//当返回的字符串首地址不为空,则会从字符串首地址开始打印,到‘\0’停止
}
if (ret1 == NULL)
{
printf("ret1 = 子串不存在\n");//当返回的字符串首地址为空,ret为一个空指针,代表不存在该子串
}
else
{
printf("ret1 = %s\n", ret1);//当返回的字符串首地址不为空,则会从字符串首地址开始打印,到‘\0’停止
}
return 0;
}
ret = defgh
ret1 = 子串不存在
参考:
https://blog.csdn.net/weixin_62677583/article/details/121353929
https://www.runoob.com/cprogramming/c-function-strstr.html