首页 > 其他分享 >复习课8 字符串

复习课8 字符串

时间:2023-09-19 21:32:23浏览次数:36  
标签:字符 复习 char arr2 数组 printf 字符串

一.字符串的定义

"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

相关文章

  • 深入解析 MySQL 中的字符串处理函数:RIGHT()、LEFT() 和 CHAR_LENGTH
    在MySQL数据库中,字符串处理是一个常见的任务,特别是当你需要从字符串中提取特定部分或者计算字符串的长度时。我们在之前的博文中已经介绍过SUBSTRING_INDEX()、SUBSTRING_INDEX()、SUBSTRING_INDEX(),感兴趣的朋友了可以翻一下我们之前的博文;在本文中,我们将深入探讨三个重要的字......
  • mysql逗号分隔的字符串转换为行
      SELECTa.id,substring_index(substring_index(a.code,',',b.help_topic_id+1),',',-1)age,a.yearFROMtaJOINmysql.help_topicbONb.help_topic_id<(length(a.code)-length(REPLACE(a.code,',','......
  • WPF TextBlock显示固定长度字符串
    页面中TextBlock控件内容 <TextBlockx:Name="name"HorizontalAlignment="Left"Text="{BindingName,Converter={StaticResourceStringMaxLenConverter},ConverterParameter=13}"TextWrapping="NoWrap"/>设置一个转换器,并且在页面中使用:<......
  • 常量池中的字符串仅是符号,第一次使用时才变为对象(加入到运行时常量池),可以避免重复
    常量池中的字符串仅是符号,第一次使用时才变为对象(加入到运行时常量池),可以避免重复创建字符串对象 intern()JDK1.8:将这个字符串对象尝试放入串池,如果StringPool中:存在一个字符串和该字符串值相等,就会返回StringPool中字符串的引用(需要变量接收)不存在,会把对象的......
  • Python字符串
    1.字符串的基本操作::::转义符操作:格式化操作:{name1="附件"name2="上课"print("%s的%s"%(name2,name1))}{print(f"{name2}的{name1}")}  2.字符串序列操作::::“容器”加“有序存储"-9-8-7-6-5-4-3 -2 -1  负索引h  e  l  l  o  y u......
  • 更改SQL Server sa密码、默认端口 以及ADO连接字符串指定端口号
    1、更改sa密码execsp_passwordnull,'000','sa'--将sa密码改为0002、更改SQLSERVER默认端口     (1)SqlServer服务使用两个端口:TCP-1433、UDP-1434。其中1433用于供SqlServer对外提供服务,1434用于向请求者返回SqlServer使用了那个TCP/IP端口。可以使用SQLServer的企业管......
  • 前端相关字符串
    Unicode是国际标准字符集,它将世界各种语言的每个字符定义一个唯一的编码,以满足跨语言、跨平台的文本信息转换。Unicode只是一个符号集,它只规定了每个符号的二进制值,但是符号具体如何存储它并没有规定。因此,Unicode出现了多种存储方式,常见的有UTF-8、UTF-16、UTF-32,它们分别用......
  • cka认证考题复习
    1、新建命名空间,在该命名空间中创建一个pod•命名空间名称:cka•pod名称:pod-01•镜像:nginx命令行配置:kubectlcreatenamespaceckakubectlrunpod-01--image=nginx--namespace=ckayaml配置:apiVersion:v1kind:Podmetadata:name:pod-01namespace:ckaspec:......
  • 复习课7 常量
    一.导入我们之前就说过生活中是有很多变化与不变的量的,我们将变化的量称为变量,将不变的量称为常量常量在生活中也有很多,如:血型、性别(不考虑特殊情况)、身份证号,那么在C语言中有哪些常量呢?二.C语言中常量的分类字面常量const修饰的常变量#define定义的标识符常量枚举常量接下来我将为......
  • split将字符串转换为数组
    <p><iclass="tag"v-for="taginitem.tag.split(',')":key="tag.id">{{tag}}</i></p>split(',') ------->将字符串转换为数组......