char*的字符串后面想要添加字符,怎么办?

jieliqun 2009-09-21 12:29:15
例如,
char* p="asdk";
char a[4]="123";
想把a[4]中的字符添加到char* p的末尾,应该如何处理?
...全文
12719 27 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
loveour 2009-09-22
  • 打赏
  • 举报
回复
其实最好还是用string的~
loveour 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 juedichongsheng 的回复:]
我看了上面各位的见解,一直有个疑问。这个指向常量的指针和常指针总是让我有点混淆。我查阅了资料:int* const p=&变量名  是常指针,就是不能再指向其他指针的指针。而const int *p=&变量名,是指向常量的指针,就是可以指向其他的指针,但对其访问的数据只能有读功能。
  char* p="asdk"; 这个到底是常指针还是指向常量的指针???
  我个人理解应该是后面的。那么#5的那个答案我觉得就完全正确了。
  听各位高手意见。


[/Quote]
"asdk"在文字常量区,是常量字符串,不可更改;所以char* p="asdk"; p是指向常量的指针。其实想一想,p这个指针我们没有去为它申请内存,指针本身不会为指向的对象申请内存,那么它指向的能是哪里呢?
HelloDan 2009-09-22
  • 打赏
  • 举报
回复 2
[Quote=引用 1 楼 brookmill 的回复:]
char p[20]="asdk";
char a[4]="123";
strcat(p, a);
[/Quote]

像上面那样,不过要有空间才行。如果没有重新分配一下,或者用string
zmmcoko 2009-09-22
  • 打赏
  • 举报
回复
上面写代码的 忘了delete(p);
tonymyx 2009-09-22
  • 打赏
  • 举报
回复
C/C++ code
#include <iostream.h>
#include <string.h>
int main()
{
char* p="asdk";
char a[4]="123";
char*t=newchar[strlen(p)+strlen(a) + 1];//先分配一块足够的空间
strcpy(t, p);//然后把p复制进去
strcat(t, a);//再把a添加到后面
delete p;
p = t;
return 0;
}

少加了1了,
tonymyx 2009-09-22
  • 打赏
  • 举报
回复
C/C++ code
#include<iostream.h>
#include<string.h>
int main()
{
char* p="asdk";
char a[4]="123";
char*t=newchar[strlen(p)+strlen(a)];//先分配一块足够的空间
strcpy(t, p);//然后把p复制进去
strcat(t, a);//再把a添加到后面
delete p;
p = t;
return 0;
}
forster 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 brookmill 的回复:]
char p[20]="asdk";
char a[4]="123";
strcat(p, a);
[/Quote]
c0000005!
jieliqun 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 brookmill 的回复:]
charp[20]="asdk";
char a[4]="123";
strcat(p, a);
[/Quote]
我在VS2005下这么做了,结果运行时出错,5楼的方法能实现
jieliqun 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fiveyes 的回复:]
有个错误,抱歉哈。改了一下(在new那一行),少了一个+1

C/C++ code
#include<iostream.h>
#include<string.h>int main()
{char* p="asdk";char a[4]="123";char*t=newchar[strlen(p)+strlen(a)+1];//先分配一块足够的空间 strcpy(t, p);//然后把p复制进去 strcat(t, a);//再把a添加到后面 p= t;//最后再赋值给p
cout<< p<< endl;return0;
}
[/Quote]
谢谢了,用这个方法能实现的。还想问一下,程序结束前,需不需要delete t?我试了一下,出错了。
fiveyes 2009-09-21
  • 打赏
  • 举报
回复
有个错误,抱歉哈。改了一下(在new那一行),少了一个+1


#include <iostream.h>
#include <string.h>

int main()
{
char* p="asdk";
char a[4]="123";

char *t = new char[strlen(p)+strlen(a)+1]; //先分配一块足够的空间
strcpy(t, p); //然后把p复制进去
strcat(t, a); //再把a添加到后面
p = t; //最后再赋值给p

cout << p << endl;
return 0;
}
fiveyes 2009-09-21
  • 打赏
  • 举报
回复

#include <iostream.h>
#include <string.h>

int main()
{
char* p="asdk";
char a[4]="123";

char *t = new char[strlen(p)+strlen(a)]; //先分配一块足够的空间
strcpy(t, p); //然后把p复制进去
strcat(t, a); //再把a添加到后面
p = t; //最后再赋值给p

cout << p << endl;
return 0;
}
zzhangtuo 2009-09-21
  • 打赏
  • 举报
回复
strcat(p,a);
理论上实现
brookmill 2009-09-21
  • 打赏
  • 举报
回复
char* p="asdk";
这个指针p指向了一块常量区的内存,不允许修改
brookmill 2009-09-21
  • 打赏
  • 举报
回复
char p[20]="asdk";
char a[4]="123";
strcat(p, a);
jinwei1984 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 juedichongsheng 的回复:]
我看了上面各位的见解,一直有个疑问。这个指向常量的指针和常指针总是让我有点混淆。我查阅了资料:int* const p=&变量名  是常指针,就是不能再指向其他指针的指针。而const int *p=&变量名,是指向常量的指针,就是可以指向其他的指针,但对其访问的数据只能有读功能。
  char* p="asdk"; 这个到底是常指针还是指向常量的指针???
  我个人理解应该是后面的。那么#5的那个答案我觉得就完全正确了。
  听各位高手意见。


[/Quote]

char* p="asdk"; 等价于 const char* p = "asdk";

好的编译器会对前者有警告
Urselect 2009-09-21
  • 打赏
  • 举报
回复
引用五楼的话,应该就是这么做了,主要用到strcat,因为指针指向内在无法修,所以用这种方法。
[Quote=引用 5 楼 fiveyes 的回复:]
有个错误,抱歉哈。改了一下(在new那一行),少了一个+1

C/C++ code
#include<iostream.h>
#include<string.h>int main()
{char* p="asdk";char a[4]="123";char*t=newchar[strlen(p)+strlen(a)+1];//先分配一块足够的空间 strcpy(t, p);//然后把p复制进去 strcat(t, a);//再把a添加到后面 p= t;//最后再赋值给p
cout<< p<< endl;return0;
}
[/Quote]
wanghui2008se 2009-09-21
  • 打赏
  • 举报
回复
以上都对,懂了吗?
qixing1115 2009-09-21
  • 打赏
  • 举报
回复
strcat可以的
liushuiyou_sheng 2009-09-21
  • 打赏
  • 举报
回复
4#挺对啊
juedichongsheng 2009-09-21
  • 打赏
  • 举报
回复
出错了,中间有句话错了啊,(就是不能再指向其它变量的指针。)
加载更多回复(7)

65,198

社区成员

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

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