一、char类型数组和null字符
字符串都是被存储在char类型数组里面,字符被存储在相邻的存储单元中,每个单元存储一个字符。 每个字符串末尾会有一个\0
,这就是空字符串,C语言用它来标记字符串结束,空字符串不是数字0,他是非打印字符,其ASCII码是0。
数组定义:同类型的数据元素的有序序列。
1.使用字符串
#include<stdio.h>
#define PARISE "You are an extraordinary being"
#pragma warning(disable:4996)
int D16_1_praisel(void) {
char name[40];
printf("What's your name?");
scanf("%s", name);
printf("Hello,%s. %s\n", name, PARISE);
return 0;
}
运行显示:
\0
注意点:我们在进行输入名字的时候是两个单词的时候,比如:Lebron James,那么
scanf()
会读取空格之前的第一个单词,不会读取后面的单词,也可以使用方法fgets()
后面再介绍。
2.strlen()函数
sizeof
运算符,它以字节为单给出对象的大小。strlen()
函数给出字符串中的字符长度。因为1字节存储一个字符二者结果可能相同,但本质并不是一种计算方式。
#include<stdio.h>
#include<string.h> /*提供strlen()函数的原型*/
#define PRAISE "You are an extraordinaty being."
#pragma warning(disable:4996)
int D16_2_praise2(void) {
char name[40];
printf("What's your name?");
scanf("%s", name);
printf("Hello,%s.%s\n", name, PRAISE);
printf("Your name of %zd letters occupies %zd memory cells.\n", strlen(name), sizeof(name));
printf("The phrase of praise has %zd letters ", strlen(PRAISE));
printf("and occupise %zd memory cells.\n", sizeof PRAISE);
return 0;
}
运行显示:
注意点:
(1)如果使用ANSI C之前的编译器,必须要移除这一行:#include<string.h>;之前的编译器使用的是strings.h这个头文件;
(2)C99和C11标准专门为sizeof运算符的返回类型特地添加了%zd
转换说明,对于函数strlen()
也同样适用。早期的C需要使用实际的返回类型(通常是unsigned或unsigned long)
(3)sizeof后面接括号的问题,如果是变量或者字面量,括号可有可无;如果是类型则需要括号,这里推荐都使用括号为好。