为什么char buffer[] = { 'x', 'y', 'z'};的strlen是7?

时间:2020-11-25 19:46:01
为什么char buffer[] = { 'x', 'y', 'z'};的strlen是7,而char buffer_2[] = "xyz";的strlen是3。后者我知道,我不明白前者。

#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

int main (void)
{
char buffer[] = { 'x', 'y', 'z'};
char buffer_2[] = "xyz";

printf("%d\n", strlen(buffer));
printf("%d\n", strlen(buffer_2));

return 0;
}

9 个解决方案

#1


第一种没有结束符,所以长度不可测,我这里运行还是11呢,取决于字符串后边的内存内容。因为strlen的原理就是从头开始计数,知道遇到结束符'\0'

#2


strlen计算字符串的长度,遇到\0 结束
char buffer[] = { 'x', 'y', 'z'};
没有结束符号‘\0’,所以结果是不确定的
 char buffer_2[] = "xyz"; 这个有结束符,自然就是三个了

#3


char buffer_2[] = "xyz"; // 而这样初始化,在'z'之后编译器会自动加上结束符'\0',此时sizeof(buffer_2)是4,因为还有一个隐含的结束符的空间

#4


合理的做法是:
char buffer[] = { 'x', 'y', 'z',\x0};

#5


之所以为7是因为在'z'之后没有找到'\0',strlen函数结束的标志就是遇到'\0'。
所以,你需要把字符串结束的标识加上才行。

#6


明白了,谢谢大家。

#7


第一个你没有加'\0'。。。得到7只是一个偶然的值。。

#8


第一个没有'\0',偶然结果,第二个包含'\0'

#9


没有 \0 strlen测不准...

#1


第一种没有结束符,所以长度不可测,我这里运行还是11呢,取决于字符串后边的内存内容。因为strlen的原理就是从头开始计数,知道遇到结束符'\0'

#2


strlen计算字符串的长度,遇到\0 结束
char buffer[] = { 'x', 'y', 'z'};
没有结束符号‘\0’,所以结果是不确定的
 char buffer_2[] = "xyz"; 这个有结束符,自然就是三个了

#3


char buffer_2[] = "xyz"; // 而这样初始化,在'z'之后编译器会自动加上结束符'\0',此时sizeof(buffer_2)是4,因为还有一个隐含的结束符的空间

#4


合理的做法是:
char buffer[] = { 'x', 'y', 'z',\x0};

#5


之所以为7是因为在'z'之后没有找到'\0',strlen函数结束的标志就是遇到'\0'。
所以,你需要把字符串结束的标识加上才行。

#6


明白了,谢谢大家。

#7


第一个你没有加'\0'。。。得到7只是一个偶然的值。。

#8


第一个没有'\0',偶然结果,第二个包含'\0'

#9


没有 \0 strlen测不准...