字符串操作函数

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 的指针

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值