首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 小弟刚学C++请教个问题! [已结贴,结贴人:sbfqusb]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-27 11:12:09 楼主
    char *str2 = new char[5];
    int l=strlen(str2);
    结果为什么是11不是5啊,问的很基础不要骂啊!
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-27 11:14:531楼 得分:5
    因为str2在创建字符数组的时候没有在数组末尾设置结束标记'\0',
    所以strlen不知道数组时间长度,结构未定义
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • akirya
    • 等级:
    发表于:2008-06-27 11:18:432楼 得分:5
    因为str2所指向的数据未知
    所以结果也是未知的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-27 11:21:123楼 得分:5
    strlen在遇到字符串结束符'\0'(ASCII值为0)时才结束
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-27 11:57:154楼 得分:2
    strlen(str2)返回值是'\0'前字符的个数,C库函数,C的字符串都是以'\0'结束的。

    C/C++ code
    #include <iostream> using std::cout; void main() { char *str2 = new char[5]; int l; str2 = "hi"; l=strlen(str2); cout << l; }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-27 12:05:345楼 得分:1
    全是正解
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-27 12:21:326楼 得分:2
    就是像上面说的,因为strlen函数都是从字符串的开始处开始统计,如果碰到‘\0’时结束统计,
    你在程序当中为指针分配了5个字符的数组,但没有初始化,就导致了它统计的是一个随机的字符串,就是未知的,
    那个11是随机的,就是得到的值不是固定的
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved