一、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;
}

运行显示:
16.1

  • 编译器会自动给字符串的末尾添加空字符\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;
}

运行显示:
16.2

注意点:
(1)如果使用ANSI C之前的编译器,必须要移除这一行:#include<string.h>;之前的编译器使用的是strings.h这个头文件;
(2)C99和C11标准专门为sizeof运算符的返回类型特地添加了%zd转换说明,对于函数strlen()也同样适用。早期的C需要使用实际的返回类型(通常是unsigned或unsigned long)
(3)sizeof后面接括号的问题,如果是变量或者字面量,括号可有可无;如果是类型则需要括号,这里推荐都使用括号为好。

二、源码:

posted on 2020-07-21 00:10  心悦君兮君不知-睿  阅读(483)  评论(0编辑  收藏  举报