免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2392 | 回复: 14
打印 上一主题 下一主题

大家好,请看下面程序的输出[已结帖] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-28 20:28 |只看该作者 |倒序浏览
// 输出 20 行 AAAAAAAAAAAAA

#include<iostream.h>
#include<string.h>
#include<windows.h>

int func(char *** str1) ;

int main()
{
        char ** str = NULL ;
        func(&str) ;
        int i = 0 ;
        for (i = 0 ; i < 20 ; i ++)       
        {
                cout<<str<<endl;
        }
                // 释放
        return 0 ;
}

int func(char *** str1)
{
        int i = 0 ;
                *str1  = (char **) malloc(sizeof(char *) * 20) ;
        for (i = 0 ; i < 20 ; i ++)
        {
                (*str1) = (char *)malloc(255 + 1) ;
                strcpy((*str1)  , "AAAAAAAAAAAAA") ;
        }

        return 0 ;
}

[ 本帖最后由 studentstep 于 2005-12-31 09:56 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2005-12-28 20:48 |只看该作者
因为strcpy(str_test[i] , "AAAAAAAAAAAAA") ;
只有13个A

论坛徽章:
0
3 [报告]
发表于 2005-12-28 21:08 |只看该作者
str_test[i]没有'\0'结束符吧

论坛徽章:
0
4 [报告]
发表于 2005-12-28 22:55 |只看该作者
基本概念混乱,错误太多了
str声明的类型不对,main和func参数表里都多加个*,再从str_test(不是str_test[1])拷贝20*4个字节就有了

再感慨一下,能写出三个星的指针来……

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2005-12-28 23:49 |只看该作者
for (i = 0 ; i < 20 ; i ++)
        {
                str_test[i] = (char *)malloc(255 + 1) ;
                strcpy(str_test[i] , "AAAAAAAAAAAAA") ;
        }
                 // 分配空间
        *str1 = (char *)malloc(255 * 20);
                // 复制数据 , 但结果是乱码
memcpy(*str1 , str_test[1] , 255 * 20) ;

关键for开辟的空间不是连续的。而下面却要用memcpy连续的copy。so,wrong。

论坛徽章:
0
6 [报告]
发表于 2005-12-29 09:18 |只看该作者
to 楼上 :

那为何 *str1 = str_test[1] ;  // 也不对呢 ? 这里是取了 str_test 的地址啊

论坛徽章:
0
7 [报告]
发表于 2005-12-29 09:29 |只看该作者
正确的应该怎么写呢 ?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2005-12-29 09:36 |只看该作者
你能保证20个malloc开辟的空间是在一起连续的么?不能,不可能。然后你却用memcpy一下子copy了255*20个空间。当然不能达到你所想的了。

论坛徽章:
0
9 [报告]
发表于 2005-12-29 09:37 |只看该作者
*str1 = (char *)str_test ; // 也不对

论坛徽章:
0
10 [报告]
发表于 2005-12-29 09:38 |只看该作者
to aero : 你说的是对的,不能用 memcpy() , 那正确的应该怎样做呢 ? 谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP