C语言——字符串、打印字符串的三种方式

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

前言

字符串(character string)是一个或多个字符的序列,空字符(null character)\0 标记字符串的结束

字符串以数组(array)存储,也就是以空字符(\0)结尾的 char 类型数组

用 %s 转换说明来处理字符串的输入和输出

输入和输出必须给出字符串的首地址,可以直接是字符串常量字符数组名,或者字符指针变量名

scanf() 输入数据时,要注意函数在读到空格制表符换行符就会停止

一、字符串

C语言中,以数组来表示字符串

1.字符串常量

​ 用一对双引号包含的一个或多个字符的序列,在内存中存放时,以’\0’(空字符)标记字符串的结束(\0是数值转义字符,对应的ASCII码为数值0)

字符串不论什么情况,结尾都会自动加一个’\0’

字符串一定以空字符结束,这意味着数组的容量必须至少比待存储字符串中的字符多1,例如 char name[5]; 只能存储4个字符,剩下一个字节留给空字符

2.注意 scanf() 读取字符串

我们用 scanf() 输入时,要注意函数在读到空格制表符换行符就会停止,如“ab c”,只会读取"ab"

例如,scanf() 输入中间有空格的字符串后观察打印情况

源代码:

#include <stdio.h>
int main()
{
    char str[40] = { 0 };

    printf("请输入:");
    scanf("%s", str);//不需要&,数组名就是首元素地址

    printf("输出为:");
    printf("%s\n", str);

    return 0;
}

运行结果:

scanf输入字符串

再来观察一下数组内的数据:

观察字符串

​ 可以看到,用户以 scanf() 函数输入字符串"Hello world!"到字符数组str,但字符数组并没有接收字符串中间空格之后的数据,说明 scanf() 在碰到空格就停止读取了

3.sizeof()函数计算字符串尺寸,strlen()函数计算字符串长度

strlen() 特点:仅以’\0’为结束判断,且不将’\0’算入内

sizeof 和 strlen 运算符的返回类型可以用 %zd 转换说明

例子:

源代码:

#include <stdio.h>
#include <string.h>

int main()
{
    //sizeof():计算字符串尺寸
    printf(" %zd\n", sizeof("abc"));     //4
    printf(" %zd\n", sizeof(""));        //1
    printf(" %zd\n", sizeof("abc\0de")); //7
    printf(" %zd\n\n", sizeof("abc de"));  //7

    //strlen():计算字符串长度
    printf(" %zd\n", strlen("abc"));     //3
    printf(" %zd\n", strlen(""));        //0
    printf(" %zd\n", strlen("abc\0de")); //3;计算字符串长度遇到第一个'\0'截止
    printf(" %zd\n", strlen("abc de"));  //6
    return 0;
}

运行结果:

字符串

4.字符数组定义和初始化

(1)传统的字符集合赋值(不推荐)

char str1[5]={'a','b','c','d','e'};        //全部赋值
char str2[5]={'a','b','c'};            //部分元素赋值
char str3[]={'a','b','c','d','e'};    //省略数组长度赋值

那么,上面三个字符数组中存放的是字符串吗?

char str1[5]={'a','b','c','d','e'};    //不是字符串
char str2[5]={'a','b','c'};        //未赋值的元素为'\0',因此是字符串
char str3[]={'a','b','c','d','e'};    
//省略数组长度赋值,长度根据字符的个数确定,不会自动补充'\0',因此不是字符串

数组内存中没有’\0’就不是字符串

注意省略数组长度赋值的情况,长度根据字符的个数确定,不会自动补充’\0’

总结:用字符集合的方式赋值时,养成习惯在末尾补充’\0’否则不是字符串

(2)字符串整体赋值

char str1[5]="abcd";//系统会自动在后面加'\0',即 ch[4]='\0'
char str2[3]="abcde";//错误,超出数组的长度
char str3[5]="abcde";//错误,超出数组长度
    
char str4[]="abc";
//推荐,系统会自动在后面加'\0',即 a[3]='\0',所以该数组的元素个数是 4 个

(3)字符指针

char* str = "Hello world!";

printf("%s\n", str);

二、打印输出字符串的三种方式

​ 输入和输出必须给出字符串的首地址,可以直接是字符串常量字符数组名,或者字符指针变量名

1.直接是字符串常量

printf("%s\n", "Hello world");

2.字符数组名

char str[]="Hello world";//字符数组名str即为字符串首地址
printf("%s\n",str);//注意打印字符串要用%s

3.字符指针变量名

char * ps1="Hello world";
printf("%s\n",ps1);
//字符串常量"Hello world"的首地址赋给字符指针变量 ps1,使 ps1 指向字符串首元素地址
char str[]="Hello world" ;
char *ps2=NULL;

ps2 = str;//数组名 str 即字符串常量首元素地址,赋给字符指针变量 ps2
printf("%s\n",ps2);
用C语言在终端打印彩色字符串 看别人的开源项目的时候发现,原来在终端可以打印带颜色的字符串的。。还蛮有意思的,只需要在待打印字符串前面和后面分别加一串修饰字符就行了。下面是C语言的一个例子:#include <stdio.h>#define ANSI_COLOR_RED "\x1b[31m" #define ANSI_COLOR_GREEN "\x1b[32m" #define ANSI_COLOR_YELLOW 阅读详情

相关推荐

打印输入的字符串(C语言

OK,一个小实验,打印一个字符串,输入完成后,直接输出 我们用到的是字符串相关函数 getchar():输入字符 putchar():打印字符 用了一个while(c=getchar()!='\n'),也就是我们连续输入字符,直到遇到的输入字符为回车,在C语言中,回车就是字符'\n',如果我们按下回车,表明我们的输入结束,然后打印出我们输入的字符串。运行结束。 用到的头文件只有stdio.h就可以了 还有就是定义一个字符型变量c,如 char c; #include<stdio.h&

卧龙院士 8184

C语言学习——打印各种图形

练习题(循环打印图形:直角三角形、翻转金字塔、菱形、K形、箭形、“空心”正方形、“空心”三角形、数字三角形、X形、实心菱形)

嵌入式技术开发 1万+

printf用法详解:C语言输出函数printf的使用方法及示例代码

在C语言编程中,printf函数是一个常用的输出函数。其中,输出格式字符串是由普通字符和格式控制符组成的字符串,用于控制输出格式和内容。输出参数列表则是可选的,用于指定输出的变量或表达式。总之,printf函数是C语言中一个非常重要的输出函数,掌握其使用方法对于C语言编程入门者来说十分必要。输出格式字符串中的转义字符必须使用反斜杠进行转义,例如:\n 表示换行,\t 表示制表符。输出格式字符串中的格式控制符必须与输出参数列表中的变量类型相对应。输出格式字符串中的普通字符必须与输出参数列表中的变量一一对应。

. 9816

C语言打印输出字符串的几种方法

C语言打印输出字符串的几种方法 以打印输出arr[30]="hello world";为例进行讲解。

weixin_63279307的博客 5万+

C语言——字符串的输入与输出

有关c语言字符串的输入和输出

weixin_74865793的博客 8243

二级指针作为函数输入的三种实现方式

#include "stdio.h" #include "stdlib.h" #include "string.h" //打印字符串内容 int PrintStr13(char ** Array, int n) {//第一种和第三种方式 int i = 0; for(i = 0; i < n; i++) { printf("%s\n",Array[i]); }

阿辉学长博客 583

指针数组的自我结束能力(三种方法)

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> void main() { int i = 0; char *c_keyword1[] = { "while", "case", "static", "do",...

汤小萌的博客 684

【C语言三种方法实现字符串逆序函数

三种方法实现字符串逆序函数(源码+图解)

铭哥不写bug的博客 4万+

c语言单链表存储字符串,字符串三种存储方式

@[TOC]在数据结构中,字符串要单独用一种存储结构来存储,称为串存储结构。这里的串指的就是字符串。无论学习哪种编程语言,操作最多的总是字符串。我们平常使用最多的存储结构无疑是利用定长数组存储。但是这种存储结构需要提前分配空间,当我们不知道字符串长度的时候,过大的分配内存无疑是一种浪费。因此,合理的选择字符串的存储方式显得格外重要。下面将依次介绍三种存储方式。定长顺序存储字符串的定长顺序存储结构,...

weixin_34530398的博客 4797

在 C 中打印字符串 - 如何在 C 中打印字符串

打印字符串是编程中的一项基本操作。它帮助您输出信息,检查和调试您的代码,并向用户显示提示信息。在本文中,您将学习在 C 中打印字符串的一些不同技术。(本文视频讲解:java567.com)

晓风晓浪 2300

字符串三种存储方式

工科生一枚,热衷于底层技术开发,有强烈的好奇心,感兴趣内容包括单片机,嵌入式Linux,Uboot等,欢迎学习交流! 爱好跑步(减肥~~),打篮球(菜鸡一枚~~),睡觉。 欢迎加入嵌入式与Linux学习交流群,群号1061551626(备注CSDN)。群内主要分享嵌入式学习经验,问题答疑,各种视频,电子书等。 文章目录定长顺序存储动态数组存储块链存储   在数据结构中,字符串要单独用一种存储结构来存储,称为串存储结构。这里的串指的就是字符串。无论学习哪种编程语言,操作最多的总是字符串。我们平常使用最多的.

嵌入式与Linux那些事的博客 1万+

C语言字符串三种表示方法

1.在C语言中,是将字符串作为字符数组来处理的,字符串是逐个存放到数组元素中的,例如用一个一维的字符数组存放字符串"I am a boy.",如下代码:char c[11] = {'I','a','m','a','b','o','y','.'};这个字符串的实际长度与数组长度相等,实际工作中,人们关心的往往是字符串的有效长度而不是字符串的数组长度,常见的下面三种方式来测定字符串的实际长度:(1)在...

chenkaibsw的专栏 6万+

c语言打印全部字符串,C语言打印字符串的一部分的方法

C语言打印字符串的一部分的方法6.6 中讨论了怎样拷贝字符串的一部分,为了打印字符串的一部分,你可以利用6.6的例子中的部分技巧,不过你现在要使用的是printf()函数,而不是sprintf()函数。请看下例:# include # include void main (void);void main (void){char * source_str = "THIS IS THE SOURCE ...

weixin_42311046的博客 5154

【C语言】浅谈C语言数组%c%s打印逻辑及数组打印单个汉字

众所周知,数组存储字母的时候,如果是一串字符,我们叫做字符串,使用双引号引用。 那么问题来了,为什么输出差别那么大呢?我们来看一下这三个arr的储存形式。 %c打印的时候会把ascll和字符相互转换就导致了出现乱码的问题,比如arr3中,%c并不知道4950515233320这个数字对应什么就会乱码。 %s打印的时候是直接打印字符一直到出现/0这个结束标志。 上面abc后面出现乱码就是这个原因,因为一直找不到/0这个结束标志,我们在c后面加一个\0就能解决问题! 以至于一个我们经常出.

qq_48280181的博客 1万+

C语言第一次总结(从C语言优势到字符串打印

ASCII 码表 - cppreference.com(其他有关ASCII码详情请浏览查阅上述网站)在这些字符中ASCII码值从0~31这32个字符是 不可打印字符 无法在屏幕上观察最初ASCII编码中只有128个字符的编码。

2301_80104093的博客 1947

C语言字符串的两种定义方式

C语言初始化字符串的两种方式有何不同

weixin_56067923的博客 1万+

c语言enum打印出前面的字符串,C语言中以字符串形式输出枚举变量

每个枚举常量对应一个整形数字,很多时候可以像整形一样使用,这个大家都知道;但是如果要求打印枚举变量名的字符串,办法也有很多,查看网上方法几乎都需要转换,要么用数组,下面要说的是一种可以算是直接打印的新方法;#会将后面的内容作为字符串返回如果想让#后面的内容作为宏使用,需要使用两层宏展开,且使用宏使用的宏里面的每个字符见到的字符都会作为返回字符串的一部分。如printf("10->%s\r\n...

weixin_34986860的博客 2329

C语言中处理字符串输出

在C语言中没有字符串类型(String),也没有字符串变量,字符串是存放在字符型数组中的。 用来存放字符数据的数组叫字符数组。 在字符数组中的一个元素内存放一个字符。 例如: char a[12]; a[0]='I',a[1]=' ',a[2]='a',a[3]='m',a[4]=' ',a[5]='s', a[6]='t',a[7]='u',a[8]='d',a[9]='e',a[10]='n', a[11]='t', 以上定义了a为字符数组,包含11个元素。赋值以后数组的状态如图所示:

weixin_44143600的博客 3839

【C语言三种方法实现字符串逆序

题目:实现字符串逆序实现 - 将参数字符串中的字符反向排列,注意:并非逆序打印要求 - 不能使用C函数库中的字符串操作函数如:strlen()

记录学习 5379
上一篇: C语言——转义字符、刷新输出
下一篇: C语言——循环语句 while、for、do while
青春无限坑
博客等级 码龄5年 22粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青春无限坑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值