用c写程序的时候,在字符串上折腾了不止一次,有点心得,写下来以备后鉴。
习惯用脚本语言或者某些高级语言写程序的人在一开始用c处理字符串的时候可能会不适应,
这是因为:
c没有定义字符串类型,或者说得高级一点:c对字符串及字符串相关的操作“封装”的比较低级。
但是这并不意味着c不能有效的处理字符串,相反,效率很高,主要的原因也显而易见:c对字符串的操作是低级的。
使得c能够处理和高效处理字符串的工具是:指针。
c通过字符数组来实现字符串类型。
在c的世界里,数组的操作几乎总是可以有等价的指针操作。
c定义:字符串是被存储在一片连续的内存区域里的字符,这片连续内存区域的起始地址是对应字符串数组的数组名;
一般情况下,内存区不存在物理上的截断,所以c靠“\0”符号来表示一个字符串在内存区里的结尾;这也是为什么c入门书里
经常会说“hello world”需要12的字符存储单元来存储而不是11个的原因,每串字符结尾都会有一个“\0”作为结尾标志。
c里的引号:
在linux bash里,单双引号的区别在于解释器解释转义字符强度的不同,共同点是均表示字符串;
但是c规定:双引号表示字符串,单引号引起来的东西是整形数,数值等于引号里面的东西在字符表里对应的数值,字符表有ASC字符表,
unicode字符表等等。这也导致了一个现象:c里面判断是哪一个字符直接用数值比较就可以了:
charA = ‘a’;
a_or_not = (charA == 97);
a_or_not 将为真(假设字符表是asc字符表)。
另外,print(charA)将输出97而不是a,除非你指定输出格式为%c(字符);
先到这里。