C学习笔记-字符串

对于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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值