免费注册 查看新帖 |

Chinaunix

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

[求助]C语言 的字符串数组动态分配 的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-23 17:13 |只看该作者 |倒序浏览
我定义了一个字符串数组

char *Result[5];

但是我在实际中这个数组的下标需要变大.

我要往这个字符串数组里面填入更多的内容,result[6],result[7].....

请问怎么样动态扩充这个字符串数组?

比如 做一次循环,范围就扩大一次,而头指针不变.

请问 能给个具体的分配 的 代码 吗?

另外请问 如果我扩充的数据量毕竟大,用链表,数组那个效率高?

[ 本帖最后由 ufoace 于 2006-5-23 19:06 编辑 ]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
2 [报告]
发表于 2006-05-23 17:29 |只看该作者
没办法。你只有用另外一个变量,记录这个数据的首地址,然后再动态分配

论坛徽章:
0
3 [报告]
发表于 2006-05-23 18:36 |只看该作者
为什么非要用数组 ?用链表多好。

论坛徽章:
0
4 [报告]
发表于 2006-05-23 19:00 |只看该作者
原帖由 nnnqpnnn 于 2006-5-23 18:36 发表
为什么非要用数组 ?用链表多好。


效率上那个高?

如果我这个扩充的数据量特别大?

论坛徽章:
0
5 [报告]
发表于 2006-05-23 19:04 |只看该作者
原帖由 cjaizss 于 2006-5-23 17:29 发表
没办法。你只有用另外一个变量,记录这个数据的首地址,然后再动态分配


请问怎么动态分配呢?

能给个代码片断吗?

论坛徽章:
0
6 [报告]
发表于 2006-05-23 19:10 |只看该作者

回复 1楼 ufoace 的帖子

做一次循环,范围就扩大一次,而头指针不变,这个应该使用链表来解决吧,使用数组动态变化长度,其首地址不可能不变吧。

论坛徽章:
0
7 [报告]
发表于 2006-05-23 20:13 |只看该作者
realloc

论坛徽章:
0
8 [报告]
发表于 2006-05-23 23:39 |只看该作者
原帖由 ufoace 于 2006-5-23 17:13 发表
我定义了一个字符串数组

char *Result[5];

但是我在实际中这个数组的下标需要变大.

我要往这个字符串数组里面填入更多的内容,result[6],result[7].....

请问怎么样动态扩充这个字符串数组?

比如 ...



数组肯定不能动态增大晒!(指针数组也是数组)
看你这个需求,还是使用链表吧。

论坛徽章:
0
9 [报告]
发表于 2006-05-24 00:03 |只看该作者
如果C++建议使用vector,C语言建议使用链表;不过如果下面这种形式如果符合你的要求则也可使用:
int arraysize=20;
int *p=NULL;
p=(int *)malloc(arraysize*sizeof(int));
..........................

论坛徽章:
0
10 [报告]
发表于 2006-05-30 15:18 |只看该作者
#define INITSIZE 1024

int dataCnt = 0;
int arraySize = INITSIZE;
char **ptr;

ptr = malloc(sizeof(char *) * arraySize);
if(ptr == NULL)
{
        //error
}

while(...)
{
        ptr[dataCnt] = malloc(4096);
        if(ptr[dataCnt] == NULL)
        {
                //error
        }
        memcpy(ptr[dataCnt],...,...);
        dataCnt++;

        if(dataCnt >= arraySize)
        {
                arraySize += INITSIZE;
                ptr = realloc(ptr, sizeof(char *) * arraySize);
                if(ptr == NULL)
                {
                        //error
                }
        }
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP