免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5457 | 回复: 6
打印 上一主题 下一主题

字符串结束符问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-03 14:27 |只看该作者 |倒序浏览
#include<iostream.h>
#include<string.h>
using namespace std;
void main()
{
        char* a = "hello";
        cout << (int)a[5] << endl;
        a[5] = '\0';
        cout << (int)a[5] << endl; //core dump
        string s = a;
        cout << s << endl;
        s = s + " the world!";
        cout << s << endl;
}

=================================
为什么会coredump?

论坛徽章:
0
2 [报告]
发表于 2007-08-03 14:32 |只看该作者
是这一句不对 a[5] = '\0';

a指向一个常量字符串

另外,你短短几行程序,存在太多问题了

论坛徽章:
0
3 [报告]
发表于 2007-08-03 14:47 |只看该作者
只是在使用roguewave的RWCString 时发现带NULL的字符串无法拼接,写个程序想重现一下问题。
当时的感觉是字符串中出现两个NULL

论坛徽章:
0
4 [报告]
发表于 2007-08-03 15:01 |只看该作者
#include<iostream.h>
#include<string.h>
using namespace std;
void main()
{
        char* a = new char[5];
        a[0] = 'h';
        a[1] = 'i';
        a[2] = 0;

        cout << (int)a[2] << endl;
        string s = a;
        cout << s << endl;
        s = s + " the world!";
        cout << s << endl;
}

output:

0
hi
hi the world!

==================

如果没有
a[2] = 0;
结果是一样的

string s = a;
是怎么判断结束符的?
还是char *a = new char[5];的初始化函数的结果?

论坛徽章:
0
5 [报告]
发表于 2007-08-03 15:10 |只看该作者
是不会自动初始化的
如果不初始化,则没有办法判断

原帖由 shockwave_115 于 2007-8-3 15:01 发表
#include
#include
using namespace std;
void main()
{
        char* a = new char[5];
        a[0] = 'h';
        a[1] = 'i';
        a[2] = 0;

        cout  

论坛徽章:
0
6 [报告]
发表于 2007-08-03 15:33 |只看该作者
我看了一下,如果没有
a[2] = 0
(int)a[2] 的值为-112,但是string s 的值依然正确,我想知道,没有'\0'作为结束符,string s是怎么知道char* a的结束的?对没有被初始化的a[2], a[3], a[4],string s 是怎么处理的?

论坛徽章:
0
7 [报告]
发表于 2007-08-03 15:39 |只看该作者
没有办法知道

原帖由 shockwave_115 于 2007-8-3 15:33 发表
我看了一下,如果没有
a[2] = 0
(int)a[2] 的值为-112,但是string s 的值依然正确,我想知道,没有'\0'作为结束符,string s是怎么知道char* a的结束的?对没有被初始化的a[2], a[3], a[4],string s 是怎么 ...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP