首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一路strlen()笔试题

2013-10-15 
一道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结尾]

热点排行