了解和使用字符串(一)

102 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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;
}

运行结果

Snipaste_2022-08-03_18-00-28.png

新发现

  • 用数组储存字符串。在该程序中,用户输入的名被储存在数组中,该数组占用内存中40个连续的字节,每个字节储存一个字符值。
  • 使用%s转换说明来处理字符串的输入和输出。注意,在scanf()中,name没有&前缀,而weight有。(&weight,name都是地址)
  • 宏定义DENSITY为62.4
  • strlen()用来获取字符串长度。

字符串

一个或多个字符的序列。例如:

"Hello World!"

双引号不是字符串的一部分。它仅告知编译器它括起来的是字符串。类似于单引号识别单个字符一样。

char类型数组和null字符

因为C语言没有专门用于储存字符串的变量类型,字符串存在char类型数组中。数组是连续的存储单元组成,字符串中的字符被存储在相邻的存储单位中,每个单位存储一个单元。

Snipaste_2022-08-03_19-32-13.png

末尾空字符用于标记字符串的结束,它是非打印字符,ASCII码等价于0.C中的字符串一定以空字符结束,意味着数组的容量必须比待储存字符串多一个字符。

数组可以看作是一行连续的多个存储单元,是同类别的有序序列。假设声明一个20个存储单位的数组,每个单位储存一个char类型的值: char word[20];

使用

%s用于printf()打印一个字符串。空字符不需要特意放入字符串末尾,scanf()就能完成这项工作。(详细举例在下一章)

字符和字符串的区别:第一,字符是基本类型,而字符串是派生类型。第二,字符串需要末尾加空字符。