社区
C++ 语言
帖子详情
越写代码越糊涂了...一个简单的指针问题
woodzong
2004-01-22 11:02:19
void main()
{
char *bb = "123456789";
printf("%s", bb);
bb[3] = '1';
printf("%s", bb);
}
代码如上.
其中bb[3]=='1';
运行时内存错了...
代码应该怎么写才能实现修改字符串第四位的操作?
要求不能修改char *bb = "123456789"; 这一行 一定要用char * 定义
越来越傻了...-_____-!!
...全文
44
21
打赏
收藏
越写代码越糊涂了...一个简单的指针问题
void main() { char *bb = "123456789"; printf("%s", bb); bb[3] = '1'; printf("%s", bb); } 代码如上. 其中bb[3]=='1'; 运行时内存错了... 代码应该怎么写才能实现修改字符串第四位的操作? 要求不能修改char *bb = "123456789"; 这一行 一定要用char * 定义 越来越傻了...-_____-!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Zark
2004-01-23
打赏
举报
回复
错误的原因正如楼上所述,bb是指向常量区的,所以不能修改其内容.
但改为这样
char *bb=new char[10];
strcpy(bb,"123456789");
也实在是太麻烦,可简单地改为:
void main()
{
char bb[] = "123456789";
printf("%s", bb);
bb[3] = '1';
printf("%s", bb);
}
Jinhao
2004-01-23
打赏
举报
回复
在C的下面真是错的吗?
chinajiji
2004-01-23
打赏
举报
回复
C正确
C++错误
///////
c/C++都错.
这是月经贴.
char *bb = "123456789";
bb是指向常量字符串的指针,常量字符串在编译时决定,存储在静态存储区.在程序的运行整个过程中不能修改,如果修改bb指向的字符串是绝对错误的,很可能造成运行时错误.
tjcbq
2004-01-23
打赏
举报
回复
我用tc++编译,没有问题.看来应该与编译器有关吧.
celeil
2004-01-23
打赏
举报
回复
用支持最新标准的编译器试试。不过应该不支持。
ahjoe
2004-01-23
打赏
举报
回复
Windows应用程序,这个常量字符串保存在只读存储区中,不能修改。
fierygnu
2004-01-23
打赏
举报
回复
C9x以前的C这样的赙值是合法的,从C9X开始这样的用法成为非法的了
aXu
2004-01-23
打赏
举报
回复
兄弟,你要是学c++的,建议你仔细的把effictive c++好好看看,记住。赫赫。我以前也像你那样写,后来改了。
hifrog
2004-01-23
打赏
举报
回复
看看这个贴:)
http://expert.csdn.net/Expert/topic/2577/2577655.xml?temp=.4602167
hifrog
2004-01-23
打赏
举报
回复
*bb = "123456789";这样声明的字符串在编译时被编译器生成的代码方在只读data segment(数据段),
用char *p是把p指向字符串在数据段的地址,在内存中只有字符串的一个副本,而且只能读,不能修改里面的内容。
而char a[]是把数据段的字符串拷贝到运行时的动态分配栈,在内存中有字符串的两个副本,可以修改字符串在动态分配栈中的内容。
.section .rodata
.LC0:
.string "123456789" //Hello World是放在read only data section(.section .rodata)中
对vc和gcc编译的程序是这种情况,而对于tc不是这种情况
BluntBlade
2004-01-23
打赏
举报
回复
又一次受到同一个错误的洗礼
haoyangmao8
2004-01-23
打赏
举报
回复
woodzong (宗)
这个错误太经典啦
不要急这是C正确C++错误
我想你用的是VC6.0编译器吧
不如换编译器
其实你上面char *bb = "123456789";
就是const char *bb = "123456789";
在这里是等价的
junnyfeng
2004-01-23
打赏
举报
回复
在TC上运行结果正常。
VC上不允许,const char *p="1234"
与 char *p="1234"
编译器处理是一样的,都放到一个被定义为只读的内存空间里,与它是否存在于局部(或全局)静态内存区无关。
可以说是编译器问题.
junglesong
2004-01-23
打赏
举报
回复
指向整数常量的指针:const int * p;它所指向的值只读不能被修改 *p = 4(错误),p = 5(正确)
指向一个整数的常量指针:int * const p;不允许修改指针变量的值,*p = 5 (正确),p = 5 (错误)
junglesong
2004-01-23
打赏
举报
回复
const char *bb = "123456789";
这样是可以的,常指针对应常量字符串.
maojunhua
2004-01-23
打赏
举报
回复
标准c++不行,上面几位都说过,不同编译器不一样,一般常量编译器优化是放在代码段,不能修改的,大体是这个意思,不知对不对哈。
Jinhao
2004-01-22
打赏
举报
回复
C正确
C++错误
byyyyy
2004-01-22
打赏
举报
回复
是不是和编译器有关系呢?应该赋初值啊
byyyyy
2004-01-22
打赏
举报
回复
这是为什么呢?
cqthinker
2004-01-22
打赏
举报
回复
楼主你的程序在tc2.0里很正常啊!
Result:
------------------------------------------
123456789123156789
加载更多回复(1)
TCP-IP详解卷1:协议
11.4
一个
简单
的例子 110 11.5 IP分片 111 11.6 ICMP不可达差错(需要分片) 113 11.7 用Traceroute确定路径MTU 114 11.8 采用UDP的路径MTU发现 116 11.9 UDP和ARP之间的交互作用 118 11.10 最大UDP数据报长度 119 ...
【C语言】让你不再害怕
指针
——C
指针
详解(经典,非常详细)
要了解
指针
,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解
一个
复杂类型,要理解复杂类型其实很
简单
,
一个
类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,...
c语言的32位
指针
加1是多少,c语言中,
指针
加1的情况.
指针
变量详细介绍
指针
是
一个
特殊的变量,它里面存储的数值被解释成为内存里的
一个
地址。要搞清
一个
指针
需要搞清
指针
的四方面的内容:
指针
的类型,
指针
所指向的类型,
指针
的值或者叫
指针
所指向的内存区,还有
指针
本身所占据的内存区。...
为什么
一个
指针
变量作为形参传递给
一个
函数后,在函数体内改变这个
指针
的指向,函数结束后这个
指针
的指向没有发生变化?
为什么
一个
指针
变量作为形参传递给
一个
函数后,在函数体内改变这个
指针
的指向,但函数结束后这个
指针
的指向没有发生变化? 现在有如下一段
代码
,其中
指针
p指向a,a的值为10,接着调用Fun函数,Fun函数的意图是将...
C语言
指针
详解(经典,非常详细)
要了解
指针
,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解
一个
复杂类型,要理解复杂类型其实很
简单
,
一个
类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,...
C++ 语言
64,282
社区成员
250,470
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章