社区
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 * 定义
越来越傻了...-_____-!!
...全文
59
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:协议
《TCP/IP详解,卷1:协议》(共3卷,其他卷请到我的空间下载)是一本完整而详细的TCP/IP协议指南。描述了属于每一层的各个协议以及它们如何在不同操作系统中运行。作者用Lawrence Berkeley实验室的tcpdump程序来捕获不同操作系统和TCP/IP实现之间传输的不同分组。对tcpdump输出的研究可以帮助理解不同协议如何工作。 本书适合作为计算机专业学生学习网络的教材和教师参考书。也适用于研究网络的技术人员。 目 录 译者序 前言 第1章 概述 1 1.1 引言 1 1.2 分层 1 1.3 TCP/IP的分层 4 1.4 互联网的地址 5 1.5 域名系统 6 1.6 封装 6 1.7 分用 8 1.8 客户-服务器模型 8 1.9 端口号 9 1.10 标准化过程 10 1.11 RFC 10 1.12 标准的
简单
服务 11 1.13 互联网 12 1.14 实现 12 1.15 应用编程接口 12 1.16 测试网络 13 1.17 小结 13 第2章 链路层 15 2.1 引言 15 2.2 以太网和IEEE 802封装 15 2.3 尾部封装 17 2.4 SLIP:串行线路IP 17 2.5 压缩的SLIP 18 2.6 PPP:点对点协议 18 2.7 环回接口 20 2.8 最大传输单元MTU 21 2.9 路径MTU 21 2.10 串行线路吞吐量计算 21 2.11 小结 22 第3章 IP:网际协议 24 3.1 引言 24 3.2 IP首部 24 3.3 IP路由选择 27 3.4 子网寻址 30 3.5 子网掩码 32 3.6 特殊情况的IP地址 33 3.7
一个
子网的例子 33 3.8 ifconfig命令 35 3.9 netstat命令 36 3.10 IP的未来 36 3.11 小结 37 第4章 ARP:地址解析协议 38 4.1 引言 38 4.2
一个
例子 38 4.3 ARP高速缓存 40 4.4 ARP的分组格式 40 4.5 ARP举例 41 4.5.1 一般的例子 41 4.5.2 对不存在主机的ARP请求 42 4.5.3 ARP高速缓存超时设置 43 4.6 ARP代理 43 4.7 免费ARP 45 4.8 arp命令 45 4.9 小结 46 第5章 RARP:逆地址解析协议 47 5.1 引言 47 5.2 RARP的分组格式 47 5.3 RARP举例 47 5.4 RARP服务器的设计 48 5.4.1 作为用户进程的RARP服务器 49 5.4.2 每个网络有多个RARP服务器 49 5.5 小结 49 第6章 ICMP:Internet控制报文协议 50 6.1 引言 50 6.2 ICMP报文的类型 50 6.3 ICMP地址掩码请求与应答 52 6.4 ICMP时间戳请求与应答 53 6.4.1 举例 54 6.4.2 另一种方法 55 6.5 ICMP端口不可达差错 56 6.6 ICMP报文的4.4BSD处理 59 6.7 小结 60 第7章 Ping程序 61 7.1 引言 61 7.2 Ping程序 61 7.2.1 LAN输出 62 7.2.2 WAN输出 63 7.2.3 线路SLIP链接 64 7.2.4 拨号SLIP链路 65 7.3 IP记录路由选项 65 7.3.1 通常的例子 66 7.3.2 异常的输出 68 7.4 IP时间戳选项 69 7.5 小结 70 第8章 Traceroute程序 71 8.1 引言 71 8.2 Traceroute 程序的操作 71 8.3 局域网输出 72 8.4 广域网输出 75 8.5 IP源站选路选项 76 8.5.1 宽松的源站选路的traceroute 程序示例 78 8.5.2 严格的源站选路的traceroute 程序示例 79 8.5.3 宽松的源站选路traceroute程序 的往返路由 80 8.6 小结 81 第9章 IP选路 83 9.1 引言 83 9.2 选路的原理 84 9.2.1
简单
路由表 84 9.2.2 初始化路由表 86 9.2.3 较复杂的路由表 87 9.2.4 没有到达目
修改
指针
指向的地址_
指针
的应用,
一个
简单
例子讲清楚你多年的
糊涂
很多人遇到
指针
就
糊涂
,搞不清到底指向什么,其实是你没搞清楚 * 修饰谁,还有一些关键字修饰谁。看下面的例子,定义
一个
无符号字符变量x,然后同时定义
一个
可以指向x的
指针
p,即可以将x的地址放到
指针
变量p里面,然后又定义了
一个
可以存放p地址的
指针
pp:#include "stdio.h"int main(void){//无符号字符变量x,指向无符号字符变量类型的
指针
p,指向
指针
类型p的
指针
p...
C语言
指针
详解(经典,非常详细)
前言:复杂类型说明 要了解
指针
,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解
一个
复杂类型,要理解复杂类型其实很
简单
,
一个
类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根据运算符优先级结合,一步一步分析.下面让我们先从
简单
的类型开始慢慢分析吧: int p; //这是
一个
普通的整型变量 i...
【C语言】让你不再害怕
指针
——C
指针
详解(经典,非常详细)
因排版过于粗糙 学习详情转至 : https://blog.csdn.net/qq_41035588/article/details/97010039 前言:复杂类型说明 要了解
指针
,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解
一个
复杂类型,要理解复杂类型其实很
简单
,
一个
类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总...
c语言的32位
指针
加1是多少,c语言中,
指针
加1的情况.
指针
变量详细介绍
指针
是
一个
特殊的变量,它里面存储的数值被解释成为内存里的
一个
地址。要搞清
一个
指针
需要搞清
指针
的四方面的内容:
指针
的类型,
指针
所指向的类型,
指针
的值或者叫
指针
所指向的内存区,还有
指针
本身所占据的内存区。让我们分别说明。先声明几个
指针
放着做例子:例一:(1)int *ptr;(2)char *ptr;(3)int **ptr;(4)int(*ptr)[3];(5)int*(*ptr)[4];
指针
的...
C++ 语言
65,208
社区成员
250,517
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章