携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情
先看一个简单程序
#include <stdio.h>
#include <string.h>
#define DENSITY 62.4
int main() {
float weight,volume;
int size,letters;
char name[40];
printf("Hi! What's your first name?\n");
scanf("%s",name);
printf("%s,what's your weight in pound?\n",name);
scanf("%f",&weight);
size = sizeof name;
letters = strlen (name);
volume = weight / DENSITY;
printf("Well,%s,your volume is %2.2f cubic feet.\n",name,volume );
printf("Also,your first name has %d letters,\n",letters);
printf("and we have %d bytes to store it.\n",size);
return 0;
}
运行结果
新发现
- 用数组储存字符串。在该程序中,用户输入的名被储存在数组中,该数组占用内存中40个连续的字节,每个字节储存一个字符值。
- 使用%s转换说明来处理字符串的输入和输出。注意,在scanf()中,name没有&前缀,而weight有。(&weight,name都是地址)
- 宏定义DENSITY为62.4
- strlen()用来获取字符串长度。
字符串
一个或多个字符的序列。例如:
"Hello World!"
双引号不是字符串的一部分。它仅告知编译器它括起来的是字符串。类似于单引号识别单个字符一样。
char类型数组和null字符
因为C语言没有专门用于储存字符串的变量类型,字符串存在char类型数组中。数组是连续的存储单元组成,字符串中的字符被存储在相邻的存储单位中,每个单位存储一个单元。
末尾空字符用于标记字符串的结束,它是非打印字符,ASCII码等价于0.C中的字符串一定以空字符结束,意味着数组的容量必须比待储存字符串多一个字符。
数组可以看作是一行连续的多个存储单元,是同类别的有序序列。假设声明一个20个存储单位的数组,每个单位储存一个char类型的值:
char word[20];
使用
%s用于printf()打印一个字符串。空字符不需要特意放入字符串末尾,scanf()就能完成这项工作。(详细举例在下一章)
字符和字符串的区别:第一,字符是基本类型,而字符串是派生类型。第二,字符串需要末尾加空字符。