| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1046 人关注过本帖
标题:帮我看看 这个为什么出现内存错误。
只看楼主 加入收藏
theperfact
Rank: 1
等 级:新手上路
帖 子:15
专家分:8
注 册:2009-8-8
结帖率:66.67%
收藏
 问题点数:0 回复次数:10 
帮我看看 这个为什么出现内存错误。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main()
{
    char str1[]={"foewj"};
    int a=strlen(str1);
    printf("%d\n",a);
    char *str2;
    if((str2=(char *)malloc(a+3))==NULL)
    {
        printf("Memory error");
    }
    strcpy(str2,str1);
    printf("%s\n",*str2);
}
搜索更多相关主题的帖子: 内存 
2010-03-23 08:48
theperfact
Rank: 1
等 级:新手上路
帖 子:15
专家分:8
注 册:2009-8-8
收藏
得分:0 
谁能看出问题在哪,?给我讲讲,谢谢
2010-03-23 08:55
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
printf("%s\n",*str2);
*str2是指针变量   所以输出 要printf("%s\n",str2);这么写
2010-03-23 08:55
theperfact
Rank: 1
等 级:新手上路
帖 子:15
专家分:8
注 册:2009-8-8
收藏
得分:0 
  谢谢 看来是我概念问题没搞清楚。
2010-03-23 08:57
theperfact
Rank: 1
等 级:新手上路
帖 子:15
专家分:8
注 册:2009-8-8
收藏
得分:0 
#include <string.h>
#include <stdlib.h>
void main()
{
    char str1[]={"foewj"};
    int a=strlen(str1);
    printf("%d\n",a);
    char *str2;
    //又出问题,下边才开辟了2个字节怎么能把str1放进去的??
    if((str2=(char *)malloc(a-3))==NULL)
    {
        printf("Memory error");
    }
    strcpy(str2,str1);
    printf("%s\n",str2);
}
2010-03-23 09:04
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
int a=strlen(str1); strlen读取的是str1里字符串的位数
你定义的 str1[]={"foewj"}; 所以 a=5;
如果你想将str1复制给 *str2那么必须给 *str2 开辟a+1个位数的空间
后面的+1是存储 '\0';
2010-03-23 09:09
theperfact
Rank: 1
等 级:新手上路
帖 子:15
专家分:8
注 册:2009-8-8
收藏
得分:0 
恩,这个我知道问题是我只开辟了a-3个位数的空间,
那他是不是应该只输出一个字符。 实际结果是我无论减几都5个字符全输出。
2010-03-23 09:17
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:0 
strcpy不检查溢出,如果你的源字符串长度超过了的目的字串的话,它仍然copy那么多,超出的部份紧接着目的字串空间的后面,打印字符串时,遇到'\0'停止,所以都会输出。。。。要控制溢出,要不然会出问题的。。。。
2010-03-23 09:26
阿邋
Rank: 2
等 级:论坛游民
帖 子:84
专家分:41
注 册:2009-3-6
收藏
得分:0 
如果 参数str2 你所分配的内存空间不够大,
可能会造成缓冲溢出(Buffer Overflow)的错误情况,
但是不是一定会缓冲溢出(Buffer Overflow)。

建议以后使用时尽量用 strncpy() 来取代 strcpy().

我并不具有我想要的一切,只是我所有的都是我想要的!
2010-03-23 12:19
zhuyunshen
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:212
专家分:455
注 册:2009-11-22
收藏
得分:0 
AAAAAAAAAAA
2010-03-23 12:29
快速回复:帮我看看 这个为什么出现内存错误。
数据加载中...
 
   



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

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