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

程式很长我只能贴其中一个函式,下面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
砖家的谎言
Rank: 12Rank: 12Rank: 12
等 级:禁止访问
威 望:30
帖 子:693
专家分:3898
注 册:2013-12-6
收藏
得分:14 
你把源文件传上来不就可以了

我不是砖家,要努力成为砖家。
2015-01-29 09:09
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
lovegh
Rank: 5Rank: 5
来 自:图灵学院
等 级:职业侠客
威 望:3
帖 子:117
专家分:311
注 册:2015-1-23
收藏
得分:0 
回复 6楼 wube
你可以直接用C++的Vector么多方便。

别老是写代码,要多陪妹子,多了解老婆大人,血淋淋的教训。
2015-01-29 20:43
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
回复 7楼 lovegh
这我知道,一开始提问前有问同事,就说过这个Class了
而且也有查到MFC也有超简单的指令可用...

不要選我當版主
2015-01-30 02:48
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你的问题经常是设计问题。

授人以渔,不授人以鱼。
2015-01-30 22:05
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
用realloc()带来的指针风险,可能是你没意识到的,诸如你上次问的数据被覆盖问题,就会因使用realloc()引起。

授人以渔,不授人以鱼。
2015-01-30 22:39
快速回复:关于动态阵列增长的写法?
数据加载中...
 
   



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

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