字符串的引入

字符串相关概念和定义方式

字符串顾名思义就是字符数组,但其中有一些需要注意的地方,字符串的定义分别有一下几种,我们通过代码展示给大家更好的理解

#include <stdio.h>

int main()
{
	int data[] = {1,2,3,4,5};//其定义与整型字符一样
	char cdata[] = {'h','e','l','l','o'};//和整型数组一个道理
	char cdata2[] = "hello";//字符串输出的改进
	char *pchar = "hello";//运用指针定义字符串
	
	for(int i=0;i<5;i++)
	{
		printf("%d ",data[i]);
	}
	putchar('\n');
	printf("%s \n",cdata);//%s是输出字符串的格式符
	printf("%s \n",cdata2);
	for(int i=0;i<5;i++)
	{
		printf("%c",*(pchar+i));
	}
	
	return 0;
}

f43f733a7bd84a21a4d49421de35d96c.png

字符串常量和字符串变量

字符串常量可以调用但不能修改其数据,而字符串变量可以修改其数据。通常用指针保存字符串常量,但只能指向字符串常量中的地址空间,不能修改数值。

代码展示:

#include <stdio.h>

int main()
{
	char cdata2[] = "hello";//字符串变量
	char *pchar = "hello";//字符串常量
	
    cdata2[3] = 'm';
	printf("%s",cdata2);
	
	*pchar = 'm';//指向数组的首地址即h,并将其修改成m
	for(int i=0;i<5;i++)
	{
		printf("%c",*(pchar+i));
	}
    puts("done");
	
	return 0;
}

5764608dc1d647e4aaf3e223e9da2711.png

根据编译结果可知,字符串变量可以发生改变,但用指针指向字符串常量数组首地址时并不能改变其数值(若能成功该数值,则会输出done)

字符串的结束标志

C语言中字符串的结束标志是‘\0’。C语言通常用字符数组来存放字符串,字符串总是以'\0'作为结束符。同时我们观察第一部分代码,不难发现输出cdara[ ]时会发生乱码,我们用代码为大家解释。

#include <stdio.h>

//strcpy strcmp strcat strstr
int main()
{
	//字符串和字符数组的区别
	char cdata[5] = {'h','e','l','l','o'};//系统认为是字符数组,后面没有补'\0',则会导致输出时乱码,但数组长度正常
	char cdata2[] = "hello";//系统认为是字符串,后面会自动补'\0',则会导致数组长度+1,但输出正常
	
	int len = sizeof(cdata)/sizeof(cdata[0]);
	printf("len = %d\n",len);
	
	len = sizeof(cdata2)/sizeof(cdata2[0]);
	printf("len = %d\n",len);
	
	printf("%s\n",cdata);
	printf("%s\n",cdata2);
	
	return 0;
}

e3fac896c0b5403588ba2d6fb5bb8c78.png

所以我们只需要在数组里面加上'\0',并修改数组总数,则不会出现乱码

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

//strcpy strcmp strcat strstr
int main()
{
	//字符串和字符数组的区别
	char cdata[6] = {'h','e','l','l','o','\0'};
	char cdata2[] = "hello";
	int len = sizeof(cdata)/sizeof(cdata[0]);
	printf("len = %d\n",len);
	
	len = sizeof(cdata2)/sizeof(cdata2[0]);
	printf("len = %d\n",len);
	
	printf("%s\n",cdata);
	printf("%s\n",cdata2);
	
	return 0;
}

8d906f53782d40cea9471a8fd7720764.png

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值