一路strlen()笔试题
一道strlen()笔试题#include stdio.h#include stdlib.hint main(){char a[10]char* p &a[0]int i
一道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结尾]