读书人

为何char buffer[] = { amp;#x27;xamp;#x27;

发布时间: 2013-06-26 14:29:32 作者: rapoo

为什么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测不准...

读书人网 >C语言

热点推荐