| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1213 人关注过本帖
标题:两个字符串连接问题
只看楼主 加入收藏
zj33
Rank: 2
等 级:论坛游民
帖 子:12
专家分:25
注 册:2008-10-2
收藏
得分:0 
错误是因为, char *s = new char[6]; s的元素是s[0],s[1],s[2],s[3],s[4],s[5],而S[6]已经越出数组S的界,s[6] = '\0';就错误了。
2009-12-29 20:20
a16393080
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2009-7-23
收藏
得分:0 
以下是引用zj33在2009-12-29 20:20:30的发言:

错误是因为, char *s = new char[6]; s的元素是s[0],s[1],s[2],s[3],s[4],s[5],而S[6]已经越出数组S的界,s[6] = '\0';就错误了。
再次感谢你的回复。
请问这里的s是否还是一个指针,能否理解成指针数组?如果我要输出new char[6]这个数组空间的首地址该如何操作?期待你的回答?再次感谢!
2009-12-29 21:19
zj33
Rank: 2
等 级:论坛游民
帖 子:12
专家分:25
注 册:2008-10-2
收藏
得分:0 
s是一个指针,不是指针数组。给你一个指针数组的例子:
#include <iostream.h>
int main( )
{
    int *p[3];
    for(int i = 0; i < 3; i++)
    {
        p[i] = NULL;
    }
    int j = 3;
    p[0] = &j;
    cout << *p[0] << endl;
    return 0;
}
输出: 3
int *p[3]; p 是指针数组。

s = new char[6]; 不是数组, s是动态分配的一个空间。s是指针,指向这个空间的首地址。
2009-12-29 22:14
a16393080
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2009-7-23
收藏
得分:0 
以下是引用zj33在2009-12-29 22:14:22的发言:

s是一个指针,不是指针数组。给你一个指针数组的例子:
#include <iostream.h>
int main( )
{
    int *p[3];
    for(int i = 0; i < 3; i++)
    {
        p = NULL;
    }
    int j = 3;
    p[0] = &j;
    co ..
如:
int a;
a=3;
char *p;
p=&a;
cout<<p;
这里输出的p的地址是0x开头的地址,但
char *s=new char[6];
里的s指针指向动态数组,返回的s为什么不是以0x开头的地址而是一串字符串?新申请的动态地址的有六个元素,s指针不是只有一个吗?怎么返回的确是一串字符串?本人在这里卡住了,只能希望你的帮助,谢谢!
2009-12-29 22:44
zj33
Rank: 2
等 级:论坛游民
帖 子:12
专家分:25
注 册:2008-10-2
收藏
得分:0 
int a = 3; char *p = &a;
 不知道你用的c++编译器是什么?我是VC++6.0, p = &a; 不能编译,不能把int * 转换为 chr *; 即使用强制转换,char * p = (char *)&a; 通过编译,cout <<p;也不可能输出
OX开头的地址,因为c++的cout<<对 char *类型变量, 是打印出字符串。
int a; a既然定义为int,指针p也应该定义为in *;, 才能指向a的地址。
2009-12-29 23:02
a16393080
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2009-7-23
收藏
得分:0 
以下是引用zj33在2009-12-29 23:02:24的发言:

int a = 3; char *p = &a;
 不知道你用的c++编译器是什么?我是VC++6.0, p = &a; 不能编译,不能把int * 转换为 chr *; 即使用强制转换,char * p = (char *)&a; 通过编译,cout <<p;也不可能输出
OX开头的地址 ...
如:
int a;
a=3;
int *p;
p=&a;
cout<<p;
这里输出的p的地址是0x开头的地址,但
char *s=new char[6];
里的s指针指向动态数组,返回的s为什么不是以0x开头的地址而是一串字符串?新申请的动态地址的有六个元素,s指针不是只有一个吗?怎么返回的确是一串字符串?本人在这里卡住了,只能希望你的帮助,谢谢!
不好意思,打错了  我想问下指向数组的指针怎么不是以0x开头的 。
2009-12-30 07:46
zj33
Rank: 2
等 级:论坛游民
帖 子:12
专家分:25
注 册:2008-10-2
收藏
得分:0 
s确实是一个指针,只不过cout<<p;的操作是从p所指的地址开始,打印字符,直到遇到空字符为止(即'\0').如果你一定要看到s所指向的地址,可以这样:cout << (int *)s;
这样做是欺骗编译器,把s看成是int型的指针,就可以看到s的以0x开头的地址了。
你看的那本书有点难了,我有一本电子书叫易学c++,刚开始看比较好,关键是多看书,多上机实践.
2009-12-30 13:52
a16393080
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2009-7-23
收藏
得分:0 
以下是引用zj33在2009-12-30 13:52:52的发言:

s确实是一个指针,只不过cout<<p;的操作是从p所指的地址开始,打印字符,直到遇到空字符为止(即'\0').如果你一定要看到s所指向的地址,可以这样:cout << (int *)s;
这样做是欺骗编译器,把s看成是in ...
谢谢你的帮助!
2009-12-30 18:29
yangliangbin
Rank: 2
来 自:广西
等 级:论坛游民
帖 子:66
专家分:62
注 册:2009-6-3
收藏
得分:0 
#include <iostream.h>
char * f(char*a,char*b);
void main()
{
    char m[4]="abc";
    char n[3]="de";
    char *k=f(m,n);
    cout<<k<<endl;
    k=NULL;
}
char * f(char *a,char *b)
{
    int i,j;
    char * s=new char[6];
    for (i=0;i<4;i++)
        s[i]=a[i];
    for (j=0;j<3;j++)
        s[j+3]=b[j];
    s[5]='\0';//注意这里是s[5]
    return s;//返回s不用减

}

相信自已……
2009-12-31 09:04
快速回复:两个字符串连接问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018718 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved