C连载16-char类型数组和null字符,以及常用两种方法对比

C连载16-char类型数组和null字符,以及常用两种方法对比

一、char类型数组和null字符

  • 字符串都是被存储在char类型数组里面,字符被存储在相邻的存储单元中,每个单元存储一个字符。
  • 每个字符串末尾会有一个,这就是空字符串,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
", name, PARISE);

	return 0;
}

运行显示:
16.1

  • 编译器会自动给字符串的末尾添加空字符

注意点:我们在进行输入名字的时候是两个单词的时候,比如: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
", name, PRAISE);
	printf("Your name of %zd letters occupies %zd memory cells.
", strlen(name), sizeof(name));
	printf("The phrase of praise has %zd letters ", strlen(PRAISE));
	printf("and occupise %zd memory cells.
", 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后面接括号的问题,如果是变量或者字面量,括号可有可无;如果是类型则需要括号,这里推荐都使用括号为好。

二、源码:

  • D16_1_praisel.c
  • D16_2_praise2.c
  • https://github.com/ruigege66/CPrimerPlus/blob/master/D16_1_praisel.c
  • https://github.com/ruigege66/CPrimerPlus/blob/master/D16_2_praise2.c
  • CSDN:https://blog.csdn.net/weixin_44630050
  • 云海天:https://www.cnblogs.com/ruigege0000/
  • 欢迎关注微信公众号:傅里叶变换,个人账号,仅用于技术交流
    20.4
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » C连载16-char类型数组和null字符,以及常用两种方法对比