Android NDK 6 C语言字符串

前言

字符串(character string)是一个或多个字符的序列,很多高级语言像 java、C#、Kotlin 都有字符串类型,但是 C 语言并没有提供符串数据类型,而是使用 char 类型的数组元素来存储字符串。

在 C 语言中定义字符串有下列几种形式:

  1. 字符串常量;
  2. char 数组;
  3. char 指针。

一、字符串常量

字符串常量的例子非常常见,它是放在一对双括号中的一串字符或符号。一对双括号之间的任何内容都会被编译器视为字符串,包括特殊字符和嵌入的空格。当使用 printf() 显示信息时,就将该信息定义为字符串常量了,看以下示例:

printf("This is a string.");
printf("This is on\ntwo lines.");
printf("Foor \" you write \\\".");

执行结果如下:

This is a string.
This is on
two lines.
For " you write \".

使用特殊字符时要注意转义字符“\”的用法。下面来看字符串常量在内存中的存储形式,如下图所示:

string_in memory.png

每个字符串的末尾都自动添加了代码值为 0 的特殊字符,这个字符称为空字符,写为 \0。C 中的字符串总是由 \0 字符结束,因此字符串的长度要比字符串中的字符数多 1。

要注意的是,在 printf() 函数遇到第一个空字符 \0 时就会停止输出。

二、存储字符串的变量

C 语言对变量存储字符串的语法没有特殊的规定,而且 C 中根本就没有 字符串变量,也没有处理字符串的特殊运算符,但是标准库中提供了很多函数来处理字符串。

2.1 char 数组

可以使用 char 数组来保存字符串,这也是字符串变量的最简单的形式,char 数组的声明如下:

char exp[32];

该变量可以存储一个最多包含 31 个字符的字符串,因为要预留一个数组元素给终止符“\0”。

注意:如果使用这个数组来存储 32 个字符(数组末位不是终止符),那么以上的 char 数组就不是表示一个字符串了,仅仅是一个 char 数组而已。

看另一种声明方式,这里使用以下声明初始化字符串变量:

char exp[] = "This is a string.";

这里并没有指定数组大小,编译器会指定一个足以容纳这个初始化字符串常量的数值。在上例中数组大小为 18,其中前 17 个元素用来存储字符,最后一个用来存储终止符“\0”。

要引用存储在数组中的字符串,只需要使用数组名即可,例如使用 printf 函数输出存储在数组中的字符串,%s 用于输出一个用空字符中止的字符串

printf("the content of the array is %s\n", standard);

三、字符指针

可以通过指针来表示字符串,一般形式如下:

char* string = "This is a string.";

这里有一点要注意:可以对上面的 string 整体赋值,但是不能修改字符串中的任一字符,否则会提示访问冲突。例如:

string++; string = 'y';
string[1] = 'e';

在这段代码中,string 本质上是一个字符指针,占 4 字节;"This is a string." 分配在代码段,占 18 个字节;实际上总共耗费了 22 个字节,这 22 个字节中:4 字节的指针 string 叫做字符串指针(用来指向字符串的,但是它本身不是字符串),17 字节的用来存 "This is a string" 这 17 个字符的内存才是真正的字符串,最后一个用来存 '\0' 的内存是字符串结尾标志(本质上也不属于字符串)。

四、字符串常用的方法

请参考 C 在线手册:http://www.kuqin.com/clib/

五、总结

C 语言中字符串的本质:指针指向头、固定尾部的地址相连的一段内存

  1. 字符串就是一串字符。字符反映在现实中就是文字、符号、数字等人用来表达的字符,反映在编程中字符就是字符类型的变量。C 语言中使用 ASCII 编码对字符进行编程,编码后可以用 char 型变量来表示一个字符。字符串就是多个字符打包在一起共同组成的;

  2. 字符串在内存中其实就是多个字节连续分布构成的(类似于数组,字符串和字符数组非常像);

  3. C 语言中字符串有 3 个核心要点:

  • 第一是用一个指针指向字符串头;
  • 第二是固定尾部(字符串总是以'\0'来结尾);
  • 第三是组成字符串的各字符彼此地址相连。
  1. '\0' 是一个 ASCII 字符,其实就是编码为 0 的那个字符(真正的 0,和数字 0 是不同的,数字 0 有它自己的 ASCII编码)。要注意区分 '\0' 和 '0' 和 0;

  2. '\0' 作为一个特殊的数字被字符串定义为结尾标志。产生的副作用就是:字符串中无法包含 '\0' 这个字符。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352

推荐阅读更多精彩内容

  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,432评论 3 44
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,340评论 0 2
  • 本文转自:http://www.cnblogs.com/lidabo/p/5225868.html 1)字符串操作...
    XiaohuiLI阅读 9,511评论 0 0
  • 苏霍姆林斯基曾说:“一个人的童年是怎样度过的?童年时代由谁引路?周围世界中进入了他的头脑和心灵的东西...
    晚起画蛾眉阅读 569评论 0 0
  • 愿时光能缓,愿故人不散。 突然想起一个几年前在网上通过漂流瓶认识的朋友,人不错,有交心,后来他发生变故,我们就很少...
    哈皮曹阅读 304评论 0 2