所以我得到了这个: 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]?可能没什么......
提前致谢
答案 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
阵列写一个匹配函数。