社区
C语言
帖子详情
字符串的处理
老鱼趣多多
2003-09-13 10:22:12
strcpy(str1,str2)的用法问题,
str1必须是字符串数组名?
当我用一个char *str1时,
我给它分配了空间,str1=new char[20];
即使这样仍不能将指针str2内的东西考进去,
谁能告诉我为什么?
...全文
101
13
打赏
收藏
字符串的处理
strcpy(str1,str2)的用法问题, str1必须是字符串数组名? 当我用一个char *str1时, 我给它分配了空间,str1=new char[20]; 即使这样仍不能将指针str2内的东西考进去, 谁能告诉我为什么?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
weibz0525
2003-09-13
打赏
举报
回复
第3个不成功吗?
再好好试试
老鱼趣多多
2003-09-13
打赏
举报
回复
1 不成功
#include <string.h>
#include <stdio.h>
main()
{
char *str1="hello world";
char *str2="hello";
strcpy(str1,str2);
return 1;
}
2 成功
#include <iostream.h>
#include <string.h>
main()
{
char *str1=new char[20];
char *str2="hello world";
strcpy(str1,str2);
}
3 不成功
#include <iostream.h>
#include <string.h>
main()
{
char *str1=new char[20];
str1="hello world!";
char *str2="hello world";
strcpy(str1,str2);
}
4 成功
#include <string.h>
main()
{
char str1[]="hello world";
char str2[]="good";
strcpy(str1,str2);
}
综上,我想问的就是,
为什么当参数str1为字符数组的时候,可以允许在str1有内容的情况下,str2可以覆盖它,
而当参数str1为指针的时候,即使为其分配了空间,仍然不能将它覆盖???
sevencat
2003-09-13
打赏
举报
回复
或者直接拷
char a[256];
strcpy(a,"I get a C++ mark")
char *s=new char[222];
strcpy(s,"faint")
njtu
2003-09-13
打赏
举报
回复
应该没问题,数组也是作为char *处理的
char * strcpy(char *dest,const char *src)
{
assert(dest != NULL && src != NULL)
char *temp = dest;
while(*dest++ = *src++);
return temp;
}
昵称怎么改都存在
2003-09-13
打赏
举报
回复
让咱看看源程序吧.学习ing.
weibz0525
2003-09-13
打赏
举报
回复
不会吧,即使没分配空间,str1都会显示str2内容
DreamInCPP
2003-09-13
打赏
举报
回复
是你的代码写的有问题。
最好是不要用这种处理方式。C++的一个指导思想是:不要去重复已有的劳动。
你可以用string类。
如:
//:
//……
#include <string>
using namespace std;
string str1,str2;
str1=str1+str2;
//……
//:~
--By C++睡梦心经
晨星
2003-09-13
打赏
举报
回复
如果还有问题,吧你的代码帖一下吧。
晨星
2003-09-13
打赏
举报
回复
谁说的?完全可以。
weibz0525
2003-09-13
打赏
举报
回复
3
不知道你用的什么编译器,我在bc 5.0下是成功的
理论上我认为也行的通,str1是在堆上分配的,既然有空间,就应该可以赋值。
char *str2="hello world"这句应该是在全局数据区给字符串常量分配内存,然后返回头指针给str2,
str1在堆上,str2在全局数据区,都有自己的空间,相互赋值应该没问题,
字符串常量最好不要更改,但不是不能更改,只不过不安全(万一是只读存储器呢)
4
字符串常量是在栈区分配空间的,而且2者都是,没什么问题
ningzhiyu
2003-09-13
打赏
举报
回复
定义了常量,常量是不能在程序中改变的。
char *str1="hello world";//定义一个字符指针,指针指向字符串常量"hello world"的首位
char *str2="hello";//同上;
strcpy(str1,str2);//这里是对指针指向的常量空间操作!!!故不成功
//////////////
char *str1=new char[20];";//定义一个字符指针,指针指向new申请的内存块。
char *str2="hello world";";//定义一个字符指针,指针指向字符串常量"hello world"的首位
strcpy(str1,str2);//把str2指向的字符串常量拷贝到str1指向的内存块(是new申请的,在栈上,非常量,可以在程序中更改)。故成功//另,结尾没有把new的内存释放,内存泄漏
///////////
char *str1=new char[20];
str1="hello world!";
应该是语法问题,c是不支持字符串赋值str1="hello world!"的,除了在定义同时初始化,如:char *str1="hello world!"; 其他地方使用str1="hello world!";类似的语法均为非法。记得应该是这样,谭先生的书就有说的。
sakurar
2003-09-13
打赏
举报
回复
且你的3中new在堆上分配的内存的指针被丢弃掉了,无疑会造成内存泻漏。
sakurar
2003-09-13
打赏
举报
回复
To yuzhenhao(出人世间):
静态存储空间是只读的。
json.jar
java平台下的JSON包,可将java对象方便的转换成JSON格式
107个常用Javascript语句
107个常用Javascript语句
Gson 2.3.1
gson最新版本gson2.3.1。源码、文档、开发包一应俱全!
SBJson解析库
ios SBJson库解析json文件 解析使用
LitJson.dll
LitJson.dll文件,用来
处理
json格式数据
C语言
70,026
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章