社区
C语言
帖子详情
tc2.0下可以运行,vc6.0为何不能运行?
worldcup
2004-07-23 05:57:48
char *a="aabbcccdefghi";
a[3]='w';
在tc20下输出:a=aabwcccdefghi
而vc60就内存出错,这是为什么??
再如:
char *a="aaa",*b="bbb";
strcpy(a,b);
在tc20下输出:a=bbb
而vc60也内存出错
究竟tc20和vc60的编译器有啥区别???谢谢!!!
...全文
160
9
打赏
收藏
tc2.0下可以运行,vc6.0为何不能运行?
char *a="aabbcccdefghi"; a[3]='w'; 在tc20下输出:a=aabwcccdefghi 而vc60就内存出错,这是为什么?? 再如: char *a="aaa",*b="bbb"; strcpy(a,b); 在tc20下输出:a=bbb 而vc60也内存出错 究竟tc20和vc60的编译器有啥区别???谢谢!!!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
worldcup
2004-07-26
打赏
举报
回复
我明白了,谢谢大家的帮助!!!
binglex
2004-07-23
打赏
举报
回复
char *a="aabbcccdefghi";
这样定义a是一个常指针,所指向的内容是readonly 的。
正解
qingyuan18
2004-07-23
打赏
举报
回复
char *a="aabbcccdefghi";
这样定义a是一个常指针,所指向的内容是readonly 的。
whyglinux
2004-07-23
打赏
举报
回复
char *a="aabbcccdefghi";
这是定义了一个字符指针,并使其指向 "aabbcccdefghi" 这个字符串。需要注意的是这个字符串并不是在栈中,而是在静态存储区中。现在的编译器(如VC等)一般把它作为常量对待,不允许更改它。这就是为什么用 VC 6.0 等编译器时用 a[3]='w'; 这样类似的操作更改它时要出错的原因。
然而,在一些旧式的编译器中,包括 TC 2.0 在内,都是把上述字符串作为非常量对待的,可以改变它。所以修改字符串的操作能够成功,就不会出错了。
如果想在现在使用的编译器中把上述字符串作为非常量处理,可借助于编译器的开关选项。例如,如果是GCC编译器,在编译时可加上 -fwritable-strings 选项,从而使常量字符串也编程是可写的。
geesun
2004-07-23
打赏
举报
回复
*(a+3)='w' 可以吗?我自己弄糊涂了!
lbaby
2004-07-23
打赏
举报
回复
char *a="aaa",*b="bbb";
char *a="aabbcccdefghi";
a[3]='w';
在以上的语句中:
a,b指向的区域的内存都是不可以被改变的,任何改变其内容的操作都是非法的
如:
a[0] = 'a';
strcpy(a,"abc");
*a = *b;
如果你要想得到一个内存区域可以改变的字符串数组,可以这样写:
a[] = "aaa";
b[] ="bbb";
freefalcon
2004-07-23
打赏
举报
回复
char *a="aabbcccdefghi"; // 这样写a指向一个字符串常量,a并没有分配内存
a[3]='w'; // 这样使用在VC里便属于非法内存访问,很多编译器都是如此,或者说语言本身就是这样规定的(我没看过标准,或许有错)
tc下为什么可以呢?跟它的实现有关吧,没怎么用过TC,不熟悉
lbaby
2004-07-23
打赏
举报
回复
区别就在于,vc6能让你的错误立即出错而被发现
而tc2一直不声不响直到出错时你还不知哪里错了
geesun
2004-07-23
打赏
举报
回复
char *a="aaa",*b="bbb";
char *a="aabbcccdefghi";
a[3]='w';
这个问题,a不是一个数组,不能够那样操作,没有[]操作。你可以这样操作:
*(a+3)='w',
strcpy(a,b);
这个本来就应该有问题的,a 不过是个指针,你没有给他分配空间,而char *a="aaa"不是给a分配空间,只是定义一个指针指向一个常量,所以应该有问题的
应该改为这样:
char a[4];,*b="bbb"
strcpy(a,b);这样在任何编译器下应该没有问题。
这些东西可能是有些编译器不够严格而已,
vc 6.0上机考试环境的使用
关键点在于,新老大纲的区别主要在于编译环境,旧大纲使用
TC2
.0,新大纲使用
VC6.0
。考生需要注意,即使“启动Visual C++”按钮不起作用,也可通过其他方式启动
VC6.0
进行考试。在实际操作中,例如从“开始”菜单的...
VC6.0
串口编程实用教程
通过对
VC6.0
串口编程实用教程的学习,不仅可以掌握串口通信的基本原理和方法,还能够了解到不同编程环境下串口编程的具体实现细节。结合实际应用案例(如西门子TC35模块的开发),可以更加深入地理解和掌握串口编程...
TurboC2.0Win7下
运行
程序
请将"C:\路径\到\你的\
TC2
.0\安装\目录"替换为实际的TurboC 2.0安装文件夹路径。 接下来,启动DosBox并加载配置。在命令行输入`dosbox -conf Dosbox.conf`,然后按回车。DosBox会启动并自动挂载你指定的TurboC 2.0...
VC6编程环境使用手册
在
VC6.0
中调试和
运行
C程序与使用TC有所不同,主要在于C++对C语言的扩展和面向对象特性。C++是在C语言的基础上发展起来的,增加了类、模板、异常处理等高级特性,而
VC6.0
作为C++的开发平台,可以充分利用这些特性。...
清华c语言高级程序设计
实例程序代码,所有程序在
TC2
.0或者在
VC6.0
下调试通过
C语言
70,020
社区成员
243,264
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章