C语言----C语言中字符串以“\\0”结尾的理解
  TEZNKK3IfmPf 2023年11月14日 30 0

问题:

如下C语言代码,通过两种方式赋值的字符串,结果arr1和arr2打印结果分别是什么?

#include <stdio.h>

int main()
{
     
       
	char arr1[] = "abc";
	printf("%s\n", arr1);
	char arr2[] = {
     
        'a','b','c' };
	printf("%s\n", arr2);
	return 0;
}

从字面表面看好像都是abc,正确结果如下所示

abc
abc烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫 烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫?恢??

原因

出现这样的结果的原因就是C语言中字符串默认是以’\0’结尾的,也就是打印字符串的时候的时候,会默认找到’\0’,上面arr2就是因为没有给赋值’\0’\,导致打印的时候就会一致往后找,一直周到’\0’,所以才会出现上述随机的乱码数据

若代码修改为如下:则两个字符串打印的结果就一致了

#include <stdio.h>

int main()
{
     
       
	char arr1[] = "abc";
	printf("%s\n", arr1);
	char arr2[] = {
     
        'a','b','c','\0' };
	printf("%s\n", arr2);
	return 0;
}

执行结果如下:

abc
abc

下面继续使用strlen()函数计算字符串的长度,观察arr1和arr2的长度

#include <stdio.h>

int main()
{
     
       
	char arr1[] = "abc";
	printf("%s\n", arr1);
	printf("length of arr1:%d\n", strlen(arr1));
	char arr2[] = {
     
        'a','b','c'};
	printf("%s\n", arr2);
	printf("length of arr2:%d\n", strlen(arr2));
	return 0;
}

执行结果如下,arr1的长度时3,而arr2的长度却是218,这里从另一个角度验证了C语言中字符串中以’\0’结尾,arr2字符串当数完3个字符时,发现还没有’\0’,所以这里继续往后找,同时需要注意的是这里arr2的长度并不是说一定是218,而应该是一个随机值

abc
length of arr1:3
abc烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫 烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫台政翎?
length of arr2:218

arr2末尾存放一个0也是可以的,这是因为’\0’的ASCII编码就是0,如下代码:

#include <stdio.h>

int main()
{
     
       
	char arr1[] = "abc";
	printf("%s\n", arr1);
	char arr2[] = {
     
        'a','b','c',0};
	printf("%s\n", arr2);
	return 0;
}

此时可以发现arr2同样也是abc

abc
abc
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月14日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年04月19日   54   0   0 进程c语言
  TEZNKK3IfmPf   2024年05月17日   36   0   0 字符串php
TEZNKK3IfmPf