博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C学习笔记-字符串
阅读量:4641 次
发布时间:2019-06-09

本文共 1655 字,大约阅读时间需要 5 分钟。

对于C语言来说,字符串其实就是最后一个元素为’\0’的char数组

字符数组的初始化

字符数组常见的有两种初始化方式

char str[] = "hello";

或者

char str[] = {
'h', 'e', 'l', 'l', 'o'};

当使用sizeof(str)时,得到的大小为6,此时是算上了’\0’的。

如果不指定数组长度的初始化,末尾加上’\0’,否贼输出长度未知

char str[] = {
'a', 'b', 'c', '\0'};//这种初始化末尾需要加上'\0'char str[] = "abc";//这种初始化不需要加上'\0'

字符串可以存放在堆区,栈区和常量区

缓冲区溢出

char arr[3] = {
0};scanf(%s, arr);//当输入长度大于2,会溢出

如果输入的字符大于字符数组的长度,会造成缓冲区溢出

scanf会以空格作为分隔符

字符串处理函数

gets

从输入设备获取输入字符串

gets不会检查预留缓冲区是否可容纳输入数据,没有解决缓冲区溢出问题

fgets

fgets用于读取文件,也可从键盘读取,此时要使用stdin。fgets会截取长度符合输入指定

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

puts

puts函数打印字符串,与printf不同,puts会在最后自动添加一个’\n’

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

fputs

fputs是puts的文件操作版本,也不会输出多余的’\n’

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

strlen,字符串长度

strlen返回字符串长度,不包含’\0’

strlen(arr);

strcat,字符串追加

strcat(a,b);

实现:

int len_a = strlen(a);int len_b = strlen(b);for ( int i = len_a; i < len_a + len_b; i++){
a[i] = b[i - lena];}

strncat,字符串有限追加

strncat(a, b, sizeof(a) - strlen(a) - 1);

strcmp,字符串比较

如果相同返回0

strcmp(a, b);

strncmp,字符串有限比较

只要指定长度内相同,则返回0

strncmp(a, "str", 3);

strcpy字符串拷贝

把b拷贝到a

strcpy(a, b);

strncpy字符串有限拷贝

防止拷贝越界

sprintf,格式化字符串

向char数组输出一个字符串,其他行为和printf一模一样

sprintf(a, "this is a %d", 10);

strchr查找字符

返回一个位置的指针,如果没找到,返回NULL

char *c = strchr(a, 'b');

strstr查找子串

char *c = strstr(a, "abc");

strtok分割字符串

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

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

atoi转化为int

将字符串整数转化为整数

atoi(buf);

atof转化为float

将字符串整数转化为单精度浮点数

atof(buf);

atol转化为long

将字符串整数转化为long类型

atol(buf);

转载于:https://www.cnblogs.com/cj5785/p/10664804.html

你可能感兴趣的文章
装饰器的基本使用:用户登录
查看>>
CSS选择器总结
查看>>
mysql中sql语句
查看>>
head/tail实现
查看>>
sql语句的各种模糊查询语句
查看>>
vlc 学习网
查看>>
Python20-Day05
查看>>
Real World Haskell 第七章 I/O
查看>>
C#操作OFFICE一(EXCEL)
查看>>
【js操作url参数】获取指定url参数值、取指定url参数并转为json对象
查看>>
ABAP 程序间的调用
查看>>
移动端单屏解决方案
查看>>
web渗透测试基本步骤
查看>>
使用Struts2标签遍历集合
查看>>
angular.isUndefined()
查看>>
第一次软件工程作业(改进版)
查看>>
网络流24题-飞行员配对方案问题
查看>>
Jenkins 2.16.3默认没有Launch agent via Java Web Start,如何配置使用
查看>>
引入css的四种方式
查看>>
iOS开发UI篇—transframe属性(形变)
查看>>