| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 992 人关注过本帖
标题:关于动态阵列增长的写法?
取消只看楼主 加入收藏
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
结帖率:97.66%
收藏
已结贴  问题点数:20 回复次数:7 
关于动态阵列增长的写法?
有一个需求是想要让程式中产生一个动态字符串阵列,
而组数能依需求增加,但是写出来的变成,
每次循环就会一直在产生新的动态字符串阵列,
请教要怎么写这一段?

程式很长我只能贴其中一个函式,下面mark掉的部分是新加入需要改的.
说简单一点就是要做像VB6的ReDim Preserve那种功能.
程序代码:
char ***CheckCood(int mode,char **ptr)
{
    int i=0,j=0,x_Max=0,y_Max=0,x_Min=0,y_Min=0;
    int New_x_Max=0,New_y_Max=0,New_x_Min=0,New_y_Min=0;
    int nCount=STD.Total_parts_tested,k=0;
    
    if (mode==0)
    {
        for (i=0;i<nCount;i++)
        {
            if(i==0)
            {
                x_Max=CD[i].x;x_Min=CD[i].x;
                y_Max=CD[i].y;y_Min=CD[i].y;
            }
            else
            {
                if ((CD[i].x>x_Max) || (CD[i].y>y_Max))
                {
                    if (CD[i].x>x_Max)
                        x_Max=CD[i].x;
                    if (CD[i].y>y_Max)
                        y_Max=CD[i].y;
                }
                else if ((CD[i].x<x_Min) || (CD[i].y<y_Min))
                {
                    if (CD[i].x<x_Min)
                        x_Min=CD[i].x;
                    if (CD[i].y<y_Min)
                        y_Min=CD[i].y;
                }
            }
        }
        New_x_Max=((x_Max/10)+1)*10;New_x_Min=((x_Min/10)-1)*10;
        New_y_Max=((y_Max/10)+1)*10;New_y_Min=((y_Min/10)-1)*10;
        My_Max_x=New_x_Max;My_Min_x=New_x_Min;
        My_Max_y=New_y_Max;My_Min_y=New_y_Min;

        if ((x_Min<0)||(y_Min<0))
            ErrorCoord=-1;
        else
            ErrorCoord=0;
    }

    char ***NewCood = NULL;
    NewCood = (char***)malloc(sizeof(char**)*My_Max_x);
    for(i=0;i<=My_Max_x;i++)
    {
        NewCood[i] = (char**)malloc(sizeof(char*)*My_Max_y);
        for(j=0;j<=My_Max_y;j++)
            NewCood[i][j] = (char*)malloc(sizeof(char)*2);
    }
    for(i=0;i<=My_Max_x;i++)
    {
        for(j=0;j<=My_Max_y;j++)
        {
            for(k=0;k<3;k++)
                NewCood[i][j][k]='0';
            NewCood[i][j][k]='\0';
        }
    }
    if (mode>0)
    {
        STD.parts_retested=0;
        for(i=0;i<nCount;i++)
        {
            char tmp1[2]={0};
            if(mode==1)
                itoa(CD[i].hw,tmp1,10);
            if(mode==2)
                itoa(CD[i].sw,tmp1,10);
            if (strcmp(NewCood[CD[i].x][CD[i].y],tmp1)==0)
            {
                if(mode==2)
                {
                 /*-------------------------------------------------------------------------------------------------
                    ptr = (char**)malloc(sizeof(char*)*STD.parts_retested);
                    ptr[STD.parts_retested] = (char*)malloc(sizeof(char)*20);
                    sprintf(ptr[STD.parts_retested],"%d,%d,%d,%d,%d",CD[i].x,CD[i].y,CD[i].sn,CD[i].hw,CD[i].sw);
                  ------------------------------------------------------------------------------------------------*/
                }
                STD.parts_retested++;
            }
            strcpy(NewCood[CD[i].x][CD[i].y],tmp1) ;
        }
        return NewCood;
    }
    return 0;
}
搜索更多相关主题的帖子: 字符串 动态 
2015-01-29 00:58
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
源文件可以上传但是没相对应能吃的原始文件也是无法运作,而原始文件算是公司机密.
还是我换个问法...
程序代码:
#include "stdafx.h"
#include "stdio.h"
#include <stdlib.h>

void AAA(char **a)
{
    int i=0;
    for(i=0;i<100;i++)
    {
        a = (char**)malloc(sizeof(char*)*i);
        a[i] = (char*)malloc(sizeof(char)*20);
        sprintf(a[i],"%d,%d,%d,%d,%d",(i+1),(i+2),(i+3),(i+4),(i+5));
    }
}

int main(int argc, char* argv[])
{
    char **p=NULL;
    AAA(p);
    return 0;
}

附件为前3次运行的画面,要怎么改?
1.rar (262.86 KB)

不要選我當版主
2015-01-29 10:25
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
抱歉,好像找到了相关教学 - realloc
图片附件: 游客没有浏览图片的权限,请 登录注册

不要選我當版主
2015-01-29 10:57
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
网路上也有人问,回答也是那个指令.
太长就不贴全文了,只贴标题会找的人就找得到.
图片附件: 游客没有浏览图片的权限,请 登录注册

不要選我當版主
2015-01-29 11:04
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
又看到一篇,好像也不错用.linked list
http://

但是绕了好大一圈后,发现我脑袋有洞,我只需在结构中加个变量,
标示是否为重复座标即可,根本用不到阵列...

虽然浪费一天找资料,但是又多学到不少东西.

不要選我當版主
2015-01-29 17:14
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
回复 7楼 lovegh
这我知道,一开始提问前有问同事,就说过这个Class了
而且也有查到MFC也有超简单的指令可用...

不要選我當版主
2015-01-30 02:48
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
结构里加了个属性就解决了...
realloc()试过,结果int型可以而char型不行.残念...
程序代码:
struct CoodINFO
{
    int flow;                                                
    int x;                                                    
    int y;                                                    
    int sw;                                                    
    int hw;                                                    
    int sn;                                                    
    char PoF;                                                
    int TestTime;                                            
    int reTest;            //Add ...                                    
}CD[IC];

程序代码:
...
char ***NewCood = NULL;
    NewCood = (char***)malloc(sizeof(char**)*My_Max_x);
    for(i=0;i<=My_Max_x;i++)
    {
        NewCood[i] = (char**)malloc(sizeof(char*)*My_Max_y);
        for(j=0;j<=My_Max_y;j++)
            NewCood[i][j] = (char*)malloc(sizeof(char)*2);
    }
    for(i=0;i<=My_Max_x;i++)
        for(j=0;j<=My_Max_y;j++)
            for(k=0;k<3;k++)
                NewCood[i][j][k]='\0';
    if (mode>0)
    {
        for(i=0;i<nCount;i++)
        {
            char tmp1[2]={0};
            if(mode==1)
                itoa(CD[i].hw,tmp1,10);
            if(mode==2)
                itoa(CD[i].sw,tmp1,10);
            if (strlen(NewCood[CD[i].x][CD[i].y])==0)
                CD[i].reTest = 0;
            else
            {
                CD[i].reTest = 1;    //Add Struct Item
                STD.parts_retested++;
            }
            
            strcpy(NewCood[CD[i].x][CD[i].y],tmp1) ;
        }
        return NewCood;
...

不要選我當版主
2015-02-02 14:41
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
上次看到用结构链表的实例后,感觉好像下次改版可以改成那种方式,就可以减少很多动态阵列的需求了,只是结构体构成还需再研究一下.

不要選我當版主
2015-02-02 14:57
快速回复:关于动态阵列增长的写法?
数据加载中...
 
   



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

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