读书人

一路strlen()笔试题

发布时间: 2013-10-15 16:47:37 作者: rapoo

一道strlen()笔试题

#include <stdio.h>
#include <stdlib.h>

int main()
{
char a[10];
char* p = &a[0];
int i;

for ( i = 0; i < 3; ++i)
{
*p++ = 'A';
}

printf("%d\n", strlen(a));
return 0;
}

这题为什么在gcc下输出5?在vc6.0下输出15?求指点?谢谢 strlen
[解决办法]
for前面先memset一下。清下零,数组里面存的是随机数据,但是strlen要见到0才停止。
[解决办法]
strlen()测试字符串长度的原理是遇到\0即0x00才会认为字符串结束,从而得到长度,楼主char a[10]字符串并没有初始化,也就是里面放的什么数都可能,在gcc中也许a[5]=0x00,在vc中可能越界后第六个字节为0x00,这才导致了如上所述的结果,所以应该在使用字符串时要有初始化的好习惯,应该用memset(a,0x00,10)来将刚申请的字符串置0.。。。希望对您有帮助
[解决办法]
没有清空 ,不管是 5 还是15 都是错的!

man 下strlen的用法,
[解决办法]
真正的核心问题是
没有字符串结尾的 '\0'

清空是解决这个问题的一个很拙略的做法

strlen 要求传入参数是 c风格字符串[以\0结尾]

读书人网 >C语言

热点推荐