C 知识量:16 - 74 - 317
字符串是一个或多个字符的序列,例如“Hello world!”。其中,双引号不是字符串的组成部分,它的作用仅是告诉编译器括起来的是字符串。
应当区别于单引号,单引号用于表示字符,与字符串不是一个概念。
在C语言中没有专门用于存储字符串的变量类型,字符串都被存储在char类型的数组中。这个数组由连续的存储单元组成,每个单元存储一个字符,但需要注意的是,在存储字符串的数组末尾位置会以一个“\0”字符结束。例如:字符串“hello pnotes”存储到数组中应为:
空字符“\0”不是数字0,它是非打印字符,其ASCII码值是0。
数组就是连续的多个存储单元,可以想象为上面示例中连续的单元格,只不过一旦定义了某种类型的数组,该数组的每个存储单元的数据类型必须是一样的。定义char类型的数组方式如下:
char name[20];
以上定义了一个用于存储字符串的char类型数组,数组名为“name”。数组name由20个连续的存储单元构成,可以存储一个长度为19的字符串(最后一个存储单元要留给“\0”)。
以下是一个简单的字符串应用示例:
#include <stdio.h> int main(void) { /*根据输入的人名打招呼*/ char name[20]; printf("What is your name?"); scanf("%s", name); printf("Good morning %s!", name); return 0; }
运行的结果为:
What is your name?Jeff Good morning Jeff!
其中,Jeff是输入的人名。控制台应用程序会首先打印“What is your name?”,然后等待输入,输入人名(Jeff)并回车后,程序会打印“Good morning Jeff!”。
以上代码中,定义了char类型数组name,它最多可以容纳19个字符。scanf()函数是一个输入函数,会在数组末尾自动加上一个\0。%s表明输入和打印的是一个字符串。
在C语言中,sizeof运算符会以字节为单位给出对象的大小(或称长度)。还有一种函数可以测量对象的长度,那就是strlen()函数。strlen()函数通常用于字符串,它可以给出字符串的实际长度。
下面通过一个示例来对比一下sizeof运算符和strlen()函数。
#include <stdio.h> #include <string.h> int main(void) { /*输入人名*/ char name[20]; printf("What is your name?"); scanf("%s", name); printf("Good morning %s!\n", name); /*显示sizeof与strlen的区别*/ printf("Your name is %zd letters.(sizeof)\n", sizeof(name)); printf("Your name is %zd letters.(strlen)", strlen(name)); system("pause"); return 0; }
以上代码的运行结果为:
What is your name?Jeff Good morning Jeff! Your name is 20 letters.(sizeof) Your name is 4 letters.(strlen)
运行时输入的人名是“Jeff”,当使用sizeof运算符检测时,name的长度是20;而使用strlen()函数检测时,name的长度是4。可见,sizeof运算符计算的是变量的存储空间大小,而strlen()函数计算的是变量实际存储的字符长度。
在以上代码中,stdio.h和string.h都称为头文件。通常,C把函数库中功能相关的函数归为一类,并为每类函数提供一个头文件。头文件中包含了某类函数的定义和声明,将头文件以#include的语法包含到程序中后,就可以在程序中使用该头文件中定义的函数了。例如,stdio.h中包含了printf()和scanf()函数;string.h中包含了strlen()函数等。
代码中需要注意的是:
sizeof运算符返回类型用%zd转换说明进行解释,这同样适用于strlen()函数。但是,如果编译器不能支持C99或更新的标准,则应当使用%u、%lu或%d。
sizeof运算符后面如果是类型,则必须使用圆括号,例如:sizeof(char)。如果后面是特定量,则可以省略圆括号,例如以上示例中可以写作:sizeof name。但是建议一直使用圆括号。
\n在printf()语句中表示换行。
代码中的system("pause")用于运行时暂停,以方便查看运行结果,如果不添加该语句,运行结果会一闪而过。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6