sprintf:将指定字符串输出到字符串缓冲区
#include <stdio.h>
int sprintf(char * str,const char * format,...);
format:指定字符串(和printf一样的写法)
str:字符串缓冲区,buf[ ]
返回值:
成功:写入的字符总数,不包括字符串追加在字符串末尾的空字符。
失败:一个负数
fprintf:在文件中输出字符串内容
#include <stdio.h>
int fprintf(FILE *stream, const char *format, ...);
fprintf(stderr,“hello%d”,a) //将helloa输出到标准出错中
返回值:
成功:写入的字符总数
失败:一个负数
getchar:从输入缓冲区读取一个字符
指定从标准输入缓冲区获取,不能从其他地方获取
#include<stdio.h>
int getchar(void);
返回值:
成功:获取的字符
失败:-1
getc:从某一个文件指针中获取一个字符
#include<stdio.h>
int getc(FILE *stream)
stream:文件指针
返回值:
成功:获取的字符
失败:-1
fgetc:等价于getc()
fgrtc只能作为函数来调用,getc可以用作宏来调用
getc由fgetc通过宏实现
getc的参数不能是有副作用的表达式
putchar:将字符存放在标准输出的缓冲区
不是行缓冲,放到缓冲区会直接输出
#include<stdio.h>
int putchar(int c)
返回值:
成功:写入的字符
失败:-1
putc:将字符存放到文件指针中
写入文件时光标自动往后移
#include<stdio.h>
int putc(int c,FILE * stream)
c:需要输出的字符
stream:文件指针
返回值:
成功:写入的字符
失败:-1
fputc:等价于putc()
gets:从标准输入缓冲区中获取一个字符串(不再使用,容易越界)
#include<stdio.h>
char *gets(char *s)
s:缓冲区
返回值:
成功:s的值
失败:NULL
fgets:从文件中读取一个指定大小的字符串到buf中
有\n也会读进去
#include <stdio.h>
char *fgets(char *s, int size, FILE *stream);
s:缓冲区的地址
size:最多获取的字节数
stream:文件指针
返回值:
成功:s的值
失败:NULL
puts:输出一个字符串到标准输出中
等价于printf("%s\n",s)
函数会自动补充一个\n
#include<stdio.h>
int puts(const char *s);
s:输出的字符串
返回值:
成功:字符串的字符个数
失败:-1
fscanf:从文件指针中按照指定格式获取数据
#include<stdio.h>
int fscanf(FILE *stream, const char *format, ...)
stream:文件指针
format:获取的格式
.......:输出的位置(buf)
该函数可以用来拆分文件中的字符串:
fscanf(fp,"%[^','],%[^','],%s",buf1,buf2,buf3);
返回值:
成功:成功匹配和赋值的个数
失败:到达文件尾或发生读错误,返回EOF(EOF为文件结束标志)
sscanf:从字符串中按照指定格式获取数据
#include <stdio.h>
int sscanf(const char *str , const char *format , ....);
返回值:
成功:返回成功匹配和赋值的个数
失败:EOF(EOF是文件结束标志)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int day, year;
char weekday[20], month[20], dtm[100];
strcpy( dtm, "Saturday March 25 1989" );
sscanf( dtm, "%s %s %d %d", weekday, month, &day, &year );
printf("%s %d, %d = %s\n", month, day, year, weekday );
return(0);
}
strchr:在字符串中找指定字符
#include<string.h>
char *strchr(const char *str, int c)
在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置
返回值:
成功:在str中第一次出现字符c的位置
失败:NULL
strstr:字符串中查找另一个字符串
#include<string.h>
char *strstr(const char *haystack, const char *needle)
在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 '\0'
返回值:
成功:在 haystack 中第一次出现 needle 字符串的位置
失败:NULL
atoi:将字符串转换为整形
#include<stdlib.h>
int atoi(const char *str)
将str中的数字字符依次转换为整形,直到第一个不是数字字符的字符为止,后边的不转换。
返回值:
成功:转换后的长整数
失败:0
strtok:分解字符串
char *strtok(char *str, const char *delim)
#include<string.h>
该函数返回被分解的第一个子字符串,如果没有可检索的字符串,则返回一个空指针。
str :要分割的字符串
delim :分隔符
每次提取完后会在原本分隔符的位置赋值一个NULL,strtok(NULL,delim)继续检索
返回值:
成功:被分解的第一个子字符串
失败:空指针
strcat:字符串拼接
#include <string.h>
char *strcat(char *dest, const char *src);
char *strncat(char *dest, const char *src, size_t n);
将src拼接到dest后边,会自动覆盖掉dest的\0
strcat会把src的\0一起拷贝过来
strncat,如果拷贝的字符中没有\0则不会拷贝src的\0,但是系统会在末尾追加一个\0,如果拷贝的字符串中带\0则不会再追加
返回值:
一个指向最终的目标字符串 dest 的指针
strncpy:拷贝字符串前n个字节
#include <string.h>
char *strncpy(char *dest, const char *src, size_t n);
拷贝src的前n个字符到dest的前n项,dest后边的字符不会改变,拷贝时如果src的前n项中有\0则后边的字符将不会拷贝,拷贝到dest中的字符从\0开始直到第n个字符将都会是\0
返回值;
最终复制的字符串
strcmp:判断两个字符串是否相同
#include <string.h>
int strcmp(const char *s1, const char *s2);
将两个字符串中的字符逐个进行比较如果相同则返回0,如果不相同返回第一个不同的字符的ascii码差值(s1-s2)
strcpy :字符串复制
#include <string.h>
char *strcpy(char *dest, const char *src)
将src中的字符串复制给dest
如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。
返回值:
指向最终的目标字符串 dest 的指针
strlen :计算字符串长度
strlen 和 sizeof 的区别是,sizeof 会计算\0,但是strlen不会,strlen返回值是size_t,strlen只能计算字符串的长度,不能计算int等.....
#include<string.h>
size_t strlen(const char *s);
返回值:
字符串的实际长度,不算\0
memset :字符填充
#include <string.h>
void *memset(void *s, int c, size_t n);
将字符c填充到s所指向的字符串的前n个字节,并覆盖原来的字符
c:需要填充的字符,该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。
n:需要填充的字符数
s:填充的位置
返回值;
指向存储区 str 的指针