| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 847 人关注过本帖, 1 人收藏
标题:错在哪里了?
只看楼主 加入收藏
沼泽
Rank: 4
等 级:业余侠客
威 望:8
帖 子:291
专家分:228
注 册:2008-9-15
收藏
得分:0 
char*st1="12345"为str1 const char *类型,它的值是常量,不可改变的,用strcat(st1,st2);当然会引起内存读写的错误了。
2008-09-15 08:03
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
[bo][un]卧龙孔明[/un] 在 2008-9-14 23:21 的发言:[/bo]



tc下是正确的...
我的老版本二级教程上就这么写的


TC有没有字符串共享呢?
char *str1="Hello",*str2="llo";

是不是str2指向str1中机某个部分了呢?那么我改
str[3]='a',那么str2是不是等于"lao"了呢?这个还是正确的么?

我觉得应该是有字符串共享的,因为TC总共就1M内存,要是全被字符串占了估计也就不剩下多少了……
这里还有一个溢出的问题:
char *str="Hello";
int i;
for(i=0;i<9999999;i++)str[i]='a';

会不会死机呢?内存从最后端的字符串存取区回绕到了前面的IDT,就会马上死机。你strcat和上面的语句有同样的问题。记住,TC里面指针的范围只是0~FFFF,再大就回绕了。

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-09-15 13:56
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
上面的观点我没有实验,有待有TC的哥们证实一下,不过,这样总归是不安全不可移植的………………

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-09-15 13:57
fcpk
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-9-14
收藏
得分:0 
#include <stdio.h>
void main()
{
    char *str1="Hello",*str2="llo";
    str1[3]='a';
    printf("%s %s\n",str1,str2);
    getch();
   
}
TC果然是共享的,VC下编译通过,但运行会出错。
#include <stdio.h>
void main()
{
    char *str="Hello";
    printf("%c\n",str[65537]);
    getch();   
}
TC下果然指针的范围只是0~FFFF,VC就不是
2008-09-15 14:40
快速回复:错在哪里了?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024589 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved