一、字符串定义
字符串:一个或多个字符的序列
"hello world!"
双引号并不是字符串的一部分,只是用于通知编译器其中包含了一个字符串
C没有为字符串定义专门的变量类型,而是将其存储在char数组中
字符串中的字符存放在相邻的存储单元中,每个字符占用一个单元
空字符:\0,用于标记字符串的结束;空字符是非打印字符,其ASCII码值为0
C的字符串存储时以空字符结束,因此数组单元的个数比需存储字符数多1
数组:同一类型的数据元素的有序序列
示例:定义一个用于存储字符串的数组,每个单元可存储一个char类型的值(字符)
char name[20];
二、字符串使用
示例代码:
/* test of character string */
#include <stdio.h>
int main(void)
{
char name[60];
printf("Please enter your name: \n");
scanf("%s", name);
printf("Your name is: %s. \n", name);
return 0;
}
运行结果:
一般情况下,使用%s的scanf()只会把一个单词而不是把整个语句作为字符串读入
字符串常量“A”与字符常量‘A’的区别:
1)前者为char数组,后者为字符
2)前者实际上由两个字符(‘A’和空字符‘\0’)组成
三、strlen()函数
strlen()函数功能:以字符为单位给出字符串的长度
示例代码:
/* test of character string and strlen function */
#include <stdio.h>
#include <string.h> // 提供strlen()函数的原型
int main(void)
{
char name[60];
printf("Please enter your name: \n");
scanf("%s", name);
printf("Your name is: %s. \n", name);
printf("Your name has %d letters in all. \n", strlen(name));
printf("It occupies %d bytes. \n", sizeof(name));
return 0;
}
运行结果:
这里需要留意strlen()函数和之前的sizeof()函数之间的功能区别;空字符可以告诉strlen()函数在哪里停止计数;sizeof()函数会把空字符也计算在内
string.h头文件:包含许多与字符串相关的函数的原型(如字符串复制函数、字符串搜索函数等),包括strlen()函数
一般情况:C把C函数库分为多个相关函数的系列,并为每个系列提供一个头文件
sizeof name // 具体的量,圆括号可以省略
sizeof(name) // 具体的量
sizeof(int) // 类型,圆括号不可或缺
sizeof是否使用圆括号取决于想获取类型的大小还是某个具体量的大小,圆括号对于类型是必须的,对于具体量是可选的;建议编程时统一使用带圆括号的写法,不容易出错
四、符号常量和C预处理器
使用符号常量的好处:1)易读;2)易修改
建立符号常量的第一个方法:C预处理器
#define PI 3.14
当编译程序时,值3.14将会在PI出现的每一处地方代替它;运行时,所有替代已经完成;这样定义的常量称为明显常量(manifest constant)
大写符号常量可以让程序易读
符号常量所用的名字必须满足变量命名规则:可以使用大写和小写字母、数字和下划线,第一个字符不能是数字
#define语句也可以用于定义字符和字符串常量:
#define BEEP '\a'
#define NAME "Forster"
建立符号常量的第二个方法:const关键字
const关键字:把一个变量声明转换成常量声明,为C90新增功能
const int MONTHS = 12; // MONTHS是一个代表12的符号常量
转换后,MONTHS成为一个只读值
建立符号常量的第三个方法:枚举(enum)功能
结构体中涉及