C语言中 字符串处理函数

1.gets函数

gets(char *s);//参数是一个字符数组
使用gets和scanf(C++中不建议使用scanf就是因为缓冲区警告)都要注意缓冲区溢出的问题
scanf回车和空格都默认输入结束,而gets只认回车//gets在新版本被淘汰了

2.fgets函数

gets函数不检查预留缓冲区是否能够容纳用户实际输入的数据。多出来的字符会导致内存溢出,而fgets函数改进了这个问题。

由于fgets函数是为读取文件设计的,所以读取键盘时没有gets那么方便

Gets有三个参数,第一个参数是char的数组,第二个参数是标明这个数组的大小,第三个参数如果是通过键盘输入可以固定写为stdin

Fgets在读取一个用户通过键盘输入的字符串的时候,同时把用户输入的回车也做为字符串的一部分。Fgets函数是安全的,不存在缓冲区溢出的问题。

Fgets(char *s, size_t len, stdin);//stdin是标准输入设备,也可以另填fopen的指针

char s[100] = { 0 };
fgets(s, sizeof(s), stdin);

3.puts函数

puts函数打印字符串,与printf不同,puts会在最后自动添加一个’\n’,puts不支持各种转义字符,比如%d,%s都不支持,puts只能简单的直接输出一个字符串,而不能输出char,int,double等其他类型。

    char s[] = "hello world";
    puts(s);

4.fputs函数

fputs是puts的文件操作版本,第一个参数是一个char的数组,第二个参数如果只是用puts在屏幕输出的话可以固定写为stdout

Fgets不会自动输出一个\n

char s[] = "hello world";
fputs(s, stdout);

5.strlen 字符串长度

查看字符串有效字符个数

这个库函数需要包含头文件<string.h>

size_t  strlen(const char * _Str);
char a[100] = "abcdefg123";
int len = strlen(a);

返回不包含字符串结尾’\0’的字符串长度

6.strcat字符串追加

size_t strcat(char * _Str1, const char * _Str2);

将参数_Str2追加到_Str1后尾

存在缓冲区溢出的危险,如果字符串没有足够的空间追加第二个字符串,那么程序就出错了

7.strncat 字符串有限追加

size_t len = sizeof(a)-sizeof(b);
if(len>0)size_t  strncat(char * _Str1, const char * _Str2, size_t len);

8.strcmp 字符串比较

int strcmp(const char * _Str1, const char * _Str2);

比较两个字符串是否相等,相等返回0,不等返回非0

9.strncmp 字符串有限比较

指定比较两个字符串的前几个字符

int strncmp(const char * _Str1, const char * _Str2, size_t n);

n代表指定比较字符串的数量

10strcpy 字符串拷贝

char *strcpy(char * _Str1, const char * _Str2);

将参数_Str2拷贝到参数_Str1中

Strcpy也存在内存溢出的问题

11.strncpy字符串有限拷贝

char *strcpy(char * _Str1, const char * _Str2, size_t n);

n代表有限拷贝。

12.sprintf 格式化字符串

和printf函数功能类似,printf函数将格式化结果输出到屏幕,sprintf将格式化结果输出到字符串

Sprintf使用方法与printf类似,唯一区别是增加了第一个参数,第一个参数是一个char数组

sprintf(str,"%d+%d=%d",a,b,a+b);//第二个参数的内容输入到第一个参数中去

12.1fprintf 按格式输入到文件

比sprintf少了fputs过程

fprintf(FILE *p,"%s",char *n);
fprintf(FILE *p,"%d %d",a1,a2);

用法和printf一样,只是多了第一个参数,参数是打开的文件指针

char a[] = "hello";
fprintf(p,"%s",a);

13Sscanf函数(按格式取)

Sscanf类似于scanf函数,,scanf从键盘读取用户输入,scanf从指定格式化字符串读取输入

Sscanf多了第一个参数,char的数组,sscanf会从这个char的数组中读取相关内容。

char str[] = "32+67";
int a,b;
sscanf(str,"%d+%d",&a,&b);
printf("a = %d,b = %d\n",a,b);


输出a = 32 ,b= 67

13.1fscanf函数(从文件中按格式读取)

文件p本身格式!
4+5
5+6

fscanf(p,"%d+%d",&a1,&a2);
printf("a1 = %d,a2 = %d\n",a1,a2);
fscanf(p,"%d+%d",&a1,&a2);//自动下移
printf("a1 = %d,a2 = %d\n",a1,a2);

输出
a1 = 4,a2 = 5
a1 = 5,a2 = 6

14.strchr查找字符

char * strchr(char * _Str, int _Ch);

在参数_str中查找参数_Ch指定字符,找到返回字符_Ch在_Str中所在位置,没有找到返回NULL;

15.strstr查找字符串

char * strstr(char * _Str, const char * _SubStr)

在参数_str中查找参数_SubStr指定子串,找到返回子串在_Str中所在位置,没有找到返回NULL;

16.strtok分割字符串

字符在第一次调用时strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL每次调用成功则返回指向被分割出片段的指针

    char buf[] = "abc@defg@igk";
    char *p = strtok(buf, "@");;
    while (p)
    {
        printf("%s\n", p);
        p = strtok(NULL, "@");
    }

17. atoi转化为int

atoi的功能就是把一个char的数组转化为一个int,需要头文件stdlib.h

char a[] = "123";
char b[] = "34";
int a1;
int b1;
a1 = atoi(a); //atof atol同理 a to int/float/long的意思
b1 = atoi(b);
int c = a1 + b1;
printf("%d\n",c);

18.atof转化为float

把一个小数形式的字符串转化为一个浮点数

19.atol转化为long

将一个字符串转化为long类型

C语言并没有把一个int转化成字符串的函数,所以不要尝试使用itoa这种函数

可以用sprintf将一个int,或者其他类型转化为一个字符串。

Itoa可以在VS编译,但在其他系统下就未知了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容