自学内容网 自学内容网

字符串和字符数组(1)

1.字符串和\0

C语言中有字符类型,但没有字符串类型,C语言中字符串就是由双引号引起来的一串字符,比如:"asdf";

一个字符串中我们能直观的看到一些字符,比如:字符串常量"asdfgh"中,我们看到了asdfgh这六个字符,实际上在末尾还隐藏着一个'\0'的转义字符,'\0'是作为字符串的结束标志存在的。

正因为\0是作为结束标志存在的,所以printf打印和计算字符串长度strlen遇到\0时,就会自动停止。

其实字符串和字符数组是非常类似的,字符串在内存中储存也是连续的,和数组是一样的。

2.字符数组的创建和初始化

字符数组就是一个存放字符的叔祖,例如:

1.//创建字符数组并初始化

2.char arr[4]={'s','f','f','r'};

这里的arr就是一个字符数组,可以存放4个字符,我们可以根据需求修改数组的大小。

我们可以使用下标访问字符数组,如下:

#include <stdio.h>
int main()
{
char arr[] = { 's','a','s'};
int sd = sizeof(arr) / sizeof(arr[0]);
int i = 0;
for (i = 0; i < sd; i++)
{
printf("%c", arr[i]);
}
return 0;
}

3.字符串常量初始化字符数组

字符数组的初始化,也可以直接使用常量字符串 ,如下代码;

1.//指定数组大小

2.char data[4]={'s','e','y','t'};

3.//通过初始化内容来确定元素个数

4.char data2[]={'e','g','f',''s};

所以当我们使用常量字符串初始化数组的时候,其实我们给数组中存放了能看到的字符和一个\0字符。这里我们也可以做一个对比:

#include <stdio.h>
int main()
{
char arr[]={'s','g','d'};
char arr1[]="sgd";
return 0;
}

在vs2022中调试后,我们在监视窗口中观察是这样的:

确实在使用常量字符串初始化的时候,数组中多了一个'\0',这个'\0'就是字符串中隐藏的 。

4.'\0'作为字符串的结束表示

在这里我们演示一下\0的作用,请看如下代码:

#include <stdio.h>
int main()
{
char arr[]={'d','t','h','u'};
char arr1[]="dthu";
printf("%c",arr);
printf("%c",arr1);

return 0;
}

输出结果:

 我们可以看到arr与arr1相比,多出了很多的随机值,这就是因为arr没有\0隐藏在结尾,所以打印就没有停止。

如果我们在arr后面加上\0会怎样呢?

#include <stdio.h>
int main()
{
char arr[] = { 'd','t','h','u' ,'\0'};
char arr1[] = "dthu";
printf("%s\n", arr);
printf("%s\n", arr1);

return 0;
}

运行结果:

 

看到这里相信就算我不说,大家应该都懂了\0的作用和重要性了吧?

5.字符数组的输入与输出

我们可以使用scanf与printf完成字符串的输入与输出,请看下面的代码:

 

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

scanf("%s", arr);
printf("%s", arr);

return 0;
}

 输入输出的结果:

注:在使用scanf输入的时候要保证字符数组够大,能够容纳输入进去的的字符,要不然就会出问题,这也是scanf被诟病不安全的地方。

 


原文地址:https://blog.csdn.net/wangjing_0522/article/details/142706619

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!