Chap 10:字符串

10.1 基本概念

1 字符串字面量 “hello, world”

char str[] = "hello, world";

2 不要将字符常量和字符串常量混淆

易混淆的 'a' 和 "a" (由两个字符’a’和’\0’组成的)
char c = 'a';
char c = "a";

"abc" 字符串本身是一个常量,它的类型是字符指针类型 const char *
const char * p = "abc";

3 转义用法

\123 	八进制表示
\x18 	十六进制表示
\	连接作用	(推荐使用 "hello" "world")

10.2 字符串的存储

易混淆的知识点 ‘\0’ vs ‘0’ 0x00 vs 0x30 (ASCII 码值不一样)

'0'	vs	"0"	
0x30	vs 	0x30 0x00	(字节数不一样)

'\0'	vs 	0
0x00	vs	0x00 00 00 00	(字节数不一样)

'\0'	vs 	'\x0'		
0*8	vs	0*16		(权重不一样,字节数一样)

经典题目

#define	CHAR(hex)	"0123456789ABCDEF"[hex]

printf('\n');	为什么会出现段错误? 请结合指针传参解释一下。

10.3 初始化字符串数组

几种方法比较

char buf[8] = "012";		// ok, the left is = '\0'
char buf[8] = "0123456";	// ok, is a string
char buf[8] = "01234567";	// ok,not a string
char buf[8] = "012345678";	// ok,not a string, warning

char buf[] = "0123456789";	// good, size is 11

易混淆的错误

char buf1[] = "hello";
char * buf2 = "HELLO";

不同点1 - 类型不同:buf1是数组 vs buf2是指针
不同点2 - 大小不同:buf1占6字节 vs buf2占4字节
不同点3 - 用法不同:buf1不能++ vs buf2可以++
不同点4 - 属性不同:buf1是地址常量 vs buf2是指针变量
不同点5 - 存储不同: "hello"是数据段(全局) vs "HELLO"是常量数据段
不同点6 - 赋值不同:字符串拷贝赋值(局部) vs 常量字符串的地址赋值
不同点7 - 写权限不同: buf1[0]='H' 修改可以 vs buf2[0]='h'修改错误
不同点8 - 效率不同: 全局buf1 > 局部buf2(常用) > 局部buf1

10.4 字符串的读写

printf("%s\n", p);	-> printf("%.5s\n", p);
puts(p)			

scanf("%s", p);		-> scanf("%5s", p);
gets(p);		-> fgets

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值