给新手的 C 语言字符串指南

字符串的几个不同层面的含义

1、源文件中出现的 "abc" 这样的字符串
这种叫做字符串字面常量,只在代码中有效。这种字面常量具有内部链接性,编译器会在每个编译单元内部为这个字符串分配空间存储。因为是常量,它所位于的内存空间通常是不可写的。

2、一个以 '/0' (ASCII NUL字符)结束的字符数组。或者更确切的说,一个包含了各种 ASCII 可打印字符的、以 '/0' 为结束的字符数组。这是 C 语言语义上的字符串定义,不涉及编译、链接的特性,但是 <string.h>和<stdio.h> 头文件中的诸多函数都是以次为依据进行处理的。strlen / strcpy / strdup 等函数在进行识别字符串的时候,只依照是否出现 '/0' 为判断条件。在很大程度上来说,所谓 C-style string 的存在,就是通过 <string.h> 和 <stdio.h> 的系列函数体现的。

字符数组,char CHARRAY[arraysize],是一个更低层面上的意义,它表示一块连续的、包含 char 类型元素的内存区间。其中的内容是否是合法的 ASCII 字符串,是否以 '/0' 结束,并不影响它作为一个字符数组的本质。当这个数组作为局部变量或者全局变量进行分配的时候,可以使用 sizeof 操作符得到整个数组所占据的空间。这个值与其中包含的字符串的 strlen 不必须相同,通常情况下也是不会相等的。

字符指针,char * p = /*initialization*/,表示一个指向 char 类型元素的指针。对它进行解除引用得到的是单个的 char。由于 C 语言支持指针算术运算(对 char *p 支持 ++p; --p; p + 2 等操作),可以通过一个 char * 方便地访问连续范围的字符串,因此通常使用 char * 来引用一个逻辑意义上的字符串。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值