字符串相关概念和定义方式
字符串顾名思义就是字符数组,但其中有一些需要注意的地方,字符串的定义分别有一下几种,我们通过代码展示给大家更好的理解
#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;
}
字符串常量和字符串变量
字符串常量可以调用但不能修改其数据,而字符串变量可以修改其数据。通常用指针保存字符串常量,但只能指向字符串常量中的地址空间,不能修改数值。
代码展示:
#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;
}
根据编译结果可知,字符串变量可以发生改变,但用指针指向字符串常量数组首地址时并不能改变其数值(若能成功该数值,则会输出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;
}
所以我们只需要在数组里面加上'\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;
}