在c中复制矩阵

时间:2011-11-05 19:17:05

标签: c matrix copy malloc

所以我得到了这个: char table1 [10 ^ length] [length]; char table2 [10 ^ length] [length];

编译器不允许我点这个: 表1表2 =;

我的代码应该带有一个字符串(只有?)

并在输出中给出所有可能的字符串(好吧它是一个更大的项目的一部分,但是让我们说它们在终端中打印 - 如果我这样做,我可以处理其余的)

以下是完整代码:

int ** wildReplacement(char *wildAM,int length)
{
    length=7;
    char * temp;
    strcpy(wildAM,"123?23");
    //getchar();
    int i=0;
    int j=0;
    int k=0;
    int l=0;
    int limit=0;
    int wildCharsNum;
    char *nlptr= NULL;

    char table1[10^length][length];
    char table2[10^length][length];


    wildCharsNum=charOccurenciesInStr(wildAM,'?');
    strcpy(temp,wildAM);
    strcpy(table1[0],wildAM);

    printf("\n!!WildChars In wildAM:%d",wildCharsNum);


    while(k<wildCharsNum)
    {
        l=0;
        while(l<=limit)
        {
            strcpy(temp,table1[l]);
            i=0;
            nlptr = strchr(temp, '?');//ka8e fora vriskei to epomeno ?
            if (nlptr) 
            {
                for(j=1;j<10;j++)
                {
                    *nlptr = myItoc(j);//antikatastasi tou ? me digits sto temp
                    strcpy(table2[i],temp);
                    i++;
                }
            }
            l++;
        }
        table1=table2;
        limit=i;
    k++;
    }

    printf("\nWild Numbers out:");
    for(i=0;i<limit;i++)
    {
        printf("\n%s",table1[i]);
    }

}

我应该像malloc一样:

char ** table1
char ** table2

table1=malloc(sizeof(char)*10^length*lenght)
table2=malloc(sizeof(char)*10^length*lenght)

程序如何知道每条记录何时结束

然后这是什么意思: table1 [1]?可能没什么......

提前致谢

1 个答案:

答案 0 :(得分:1)

当你malloc二维数组时,你不能构造一些与编译器为数组声明所做的相同的东西。 char a[100][50]是一个连续的内存块,为5000 char。当您下标它时,编译器能够执行行/列数学运算,因为它在编译时知道大小。当您malloc等效的二维数组时,您必须提供一个索引行的行数组。这就是你如何回答你的问题“程序如何知道每个记录何时结束”:

char **b;
int i;
int rows = 100;
int cols = 50;
/* using sizeof(*b) is a good habit because there's only */
/* one place where you have to change type information */
b = malloc(rows * sizeof(*b));
/* now create a bunch of rows */
for (i = 0; i < rows; ++i) {
    b[i] = malloc(cols * sizeof(**b));
}

请注意,由于rows索引数组,这比声明的数组占用更多内存。

作为优化,您可以避免循环中重复malloc,并从rows * cols * sizeof(**b)的单个大量分配中包裹内存。

请注意为匹配的free阵列写一个匹配函数。