一.字符串的定义
"hello world"
由双引号引起来的一串字符称为字符串字面值,简称字符串
下面我们来介绍一下字符串的输出方式,示例代码如下:
#include<stdio.h>
int main(void)
{
char str[] = "hello world";
printf("%s",str);
return 0;
}
我们这里创建了一个字符类型的数组名为str,我们将hello world这个字符串存入这个数组中,最后再使用printf()函数将其输出
注意⚠️:当我们需要打印字符串的时候需要用转义符 %s 来进行输出
误区⚠️:字符和字符串不是同一回事,我们如果需要创建一个字符类型需要将代码写成如下形式:
char word = 'A';
字符变量的创建是用单引号 '' 而不是双引号 ""
如果我们需要创建一个字符串则可以写成如下形式:
char name[] = "Eric";
这里的字符串就需要用双引号引起来,所以如果搞混了字符和字符串就会导致程序出现问题
二.字符串详解
我们来看一下下面这段代码会输出什么内容:
#include<stdio.h>
int main(void)
{
char arr1[] = "hello";
char arr2[] = {'h','e','l','l','o'};
printf("arr1 --> %s\n",arr1);
printf("arr2 --> %s",arr2);
return 0;
}
我们运行以上程序后可以发现arr1数组输出的内容完全正确,但是arr2所输出的内容却出现了很多奇奇怪怪的字符,这是为什么呢?
我们上文说过数组的结束标志就是 \0 而arr1数组存放的很显然是一个字符串,所以系统会自动在最后一个字符后面添加上 \0 的结束标识符代表字符串的内容到这里就结束了,而arr2数组存放的都是单个的字符,但是我们还是使用 %s 对其进行输出,其最后一个字符后并没有 \0 的字符串结束标志,所以printf()函数会一直往后读取直到读取到 \0 才会停止,而数组后面的数据都是内存中未使用的垃圾值,所以会导致输出很多的乱码,解决方式也很简单我们只需要将arr2数组代码改成如下形式就可以了:
char arr2[] = {'h','e','l','l','o','\0'};
既然系统没有帮我们自动添加 \0 的结束标识那我们就自己添加一个不就可以了吗,我们再次运行程序就可以发现这次两个数组数组输出的内容都是一摸一样的
三.strlen()函数
strlen()函数主要是用来计算字符串长度的,我们举一个例子:
#include<stdio.h>
#include<string.h>
int main(void)
{
char name[] = "hello";
int len = strlen(name);
printf("len=%d",len);
return 0;
}
我们编译并运行这段代码程序就会输出len=5,因为hello这个字符串一共占用了5个字节,那可能我们会有疑问难道\0不算吗?
其实这个函数以 \0 为结束标志停止计数,但是却不会将 \0 算入字符串的大小,所以这一点我们是需要注意的
2023/9/19
王起舟
标签:字符,复习,char,arr2,数组,printf,字符串 From: https://blog.51cto.com/u_16183773/7529304