一个字符串的小问题

hcon 2008-04-09 11:06:25
//984
#include<iostream>
using namespace std;
main()
{
char *s1=new char[2];//为什么这里是[1]
cout<<"请输入一个字符:"<<endl;
cin.getline(s1,2);//[1]
char *s2="nihaoma";
cout<<strcat(s2,s1)<<endl;//输入的字符就不连到后面了?
delete s1;
return 0;
}
...全文
143 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
清钟沁桐 2008-05-23
  • 打赏
  • 举报
回复
char *s1=new (char); 只是分配一个 char 空间呀
Leejun527 2008-04-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zhongyunde 的回复:]
char *s1=new char[2];//
使用上面的语句申请空间后
delete s1;和 delete 【】s1;有什么区别?
[/Quote]
delete 是删除一个指针,delete 【】是删除指针数组。你这里应该用delete s1
HelloDan 2008-04-10
  • 打赏
  • 举报
回复
char *s2="nihaoma"; 这样初始化的都是常量的,不能修改

s1后面加一个‘\0’作为字符串的结尾,共计两个字符
Leejun527 2008-04-10
  • 打赏
  • 举报
回复
你是问char *s1=new char[2];//为什么这里不是[1]吧?
因为还要往s1后面加一个‘\0’作为字符串的结尾。
jinwei1984 2008-04-10
  • 打赏
  • 举报
回复
const char *s2 = "...";//更标准的应该是这样的吧,那个字符串字面值在常量区,貌似没法改变的
Kratos 2008-04-10
  • 打赏
  • 举报
回复
好像是反斜杠\0
Kratos 2008-04-10
  • 打赏
  • 举报
回复
字符后没有/0
字符串有;
basicfua 2008-04-10
  • 打赏
  • 举报
回复
把指针的赋值改成:char *s2=new char;
strcpy(s2,"nihaoma");
basicfua 2008-04-10
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<string.h>
int main(void)
{
char *s1=new (char);
char *s2=new (char);

gets(s1);
gets(s2);
strcat(s2,s1);
printf("%s",s2);
return 0;
}
swjtu_ya 2008-04-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zcl198715 的回复:]
你可以去看看C++里面对strcat(char *,char *)的定义就知道原因了!
初看:char a[max]="..."与char *a="..."一样,其实这有本质的区别的!
首先char a[max]中的a分配了内存空间,也就是说它有实际的空间,而char *a此时的a只存放了地址,而那个地址是"..."的地址!
[/Quote]

*s2=new char[20];不是要求内存分配给*S指针20个字节的空间了吗?
采用10楼建议,问题解决,但在C-FREE中通不过编译,6.0可以,不能理解。
zcl198715 2008-04-10
  • 打赏
  • 举报
回复
你可以去看看C++里面对strcat(char *,char *)的定义就知道原因了!
初看:char a[max]="..."与char *a="..."一样,其实这有本质的区别的!
首先char a[max]中的a分配了内存空间,也就是说它有实际的空间,而char *a此时的a只存放了地址,而那个地址是"..."的地址!
liymzd 2008-04-10
  • 打赏
  • 举报
回复
可以用char s2[20]="nihaoma"; 不要new了
swjtu_ya 2008-04-10
  • 打赏
  • 举报
回复
LZ的第二個問題沒有回答啊,為什麼不能把S1連到S2後面啊?我開始想是因為*S2是常量,後面沒有空間給S1追加,後來改瞭下面的程式,執行后還是出現内存错误。大俠給講講。謝謝!
#include<iostream>
using namespace std;
main()
{
char *s1=new char[2];//为什么这里是[1]
cout<<"请输入一个字符:"<<endl;
cin.getline(s1,2);//[1]
char *s2=new char[20];
s2="nihaoma";
cout<<strcat(s2,s1)<<endl;//输入的字符就不连到后面了?
delete s1;
return 0;
}
清钟沁桐 2008-04-10
  • 打赏
  • 举报
回复
#include <iostream>

using namespace std;


int main()
{
//大家好,请问如果有个字符串 str = "1234.456\tsada144.456da";
//任何从中提取两个浮点数据 1234.456 和 144.456 呢 ??
char Test[] = "1234.456\tsada144.456da";
char Other;
int i = 0;

while (Test[i] != '\0')
{
if (Test[i] >= '0' && Test[i] <= '9' || Test[i] == '.')
{
Other = Test[i];
}

else if (Test[i] == '\t')
{
Other = '0';
}

else
{
Other = ' ';
}

cout << Other;

i++;
}

return 0;
}
清钟沁桐 2008-04-10
  • 打赏
  • 举报
回复
char *s1=new char[2];//
使用上面的语句申请空间后
delete s1;和 delete 【】s1;有什么区别?

redjuly 2008-04-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 hcon 的帖子:]
C/C++ code//984#include<iostream>usingnamespacestd;
main()
{char*s1=newchar[2];//为什么这里是[1]cout<<"请输入一个字符:"<<endl;
cin.getline(s1,2);//[1]char*s2="nihaoma";
cout<<strcat(s2,s1)<<endl;//输入的字符就不连到后面了?delete s1;return0;
}
[/Quote]

s2空间就那么大阿。。。。
zgjxwl 2008-04-09
  • 打赏
  • 举报
回复
char *s1=new char[2];//为什么这里是[1]
???????????????????????????

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧