#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"; 这个有结束符,自然就是三个了
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};
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"; 这个有结束符,自然就是三个了
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};
char buffer[] = { 'x', 'y', 'z',\x0};
#5
之所以为7是因为在'z'之后没有找到'\0',strlen函数结束的标志就是遇到'\0'。
所以,你需要把字符串结束的标识加上才行。
所以,你需要把字符串结束的标识加上才行。
#6
明白了,谢谢大家。
#7
第一个你没有加'\0'。。。得到7只是一个偶然的值。。
#8
第一个没有'\0',偶然结果,第二个包含'\0'
#9
没有 \0 strlen测不准...