为何char buffer[] = { 'x' 'y' 'z'};的strlen是7
为什么char buffer[] { 'x', 'y', 'z'}的strlen是7?为什么char buffer[
为什么char buffer[] = { 'x', 'y', 'z'};的strlen是7?
为什么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;
}
[解决办法]第一种没有结束符,所以长度不可测,我这里运行还是11呢,取决于字符串后边的内存内容。因为strlen的原理就是从头开始计数,知道遇到结束符'\0'
[解决办法]strlen计算字符串的长度,遇到\0 结束
char buffer[] = { 'x', 'y', 'z'};
没有结束符号‘\0’,所以结果是不确定的
char buffer_2[] = "xyz"; 这个有结束符,自然就是三个了
[解决办法]char buffer_2[] = "xyz"; // 而这样初始化,在'z'之后编译器会自动加上结束符'\0',此时sizeof(buffer_2)是4,因为还有一个隐含的结束符的空间
[解决办法]合理的做法是:
char buffer[] = { 'x', 'y', 'z',\x0};
[解决办法]之所以为7是因为在'z'之后没有找到'\0',strlen函数结束的标志就是遇到'\0'。
所以,你需要把字符串结束的标识加上才行。
[解决办法]第一个你没有加'\0'。。。得到7只是一个偶然的值。。
[解决办法]第一个没有'\0',偶然结果,第二个包含'\0'
[解决办法]没有 \0 strlen测不准...