我将一个多维字符数组传递给c中的一个函数。main()或任何函数决定输入数组的大小(维度)。我试图在我的函数中动态地确定数组的长度和宽度。到目前为止,我已经能够动态地确定第一行的宽度。然而,如果我试图使用相同的逻辑来确定长度,我得到访问冲突错误。这是我到目前为止的代码:
char * myfunc( char* in[] )
{
int index=0, cols=0;
while( in[0][index++] != ' ' );
cols = index - 1;
:
:
}
int main()
{
char *in[3] = {"abcd","efgh","ijkl"};
char *out = myfunc( in );
:
:
}
对我来说幸运的是,**in的所有'行'中的'cols'是相等的。我认为更健壮的方法是首先确定行数,然后测试每行的cols数。每次尝试对行执行类似操作时,都会导致访问冲突错误。
我应该提到,我不能重新定义函数来传递数组的维数。我还应该提到,这不是家庭作业或工作-工作,我在刷我的c编码技能时遇到了这个问题。是否有一种方法可以在不导致访问冲突错误的情况下确定上述情况下的行数?以您现有的数据,这是不可能的。但是你可以像这样添加一个哨兵:
char *in[4] = {"abcd", "efgh", "ijkl", NULL};
,然后寻找哨兵(这实际上是通过在第一个字符串中查找哨兵' '
来计算列)。
char * myfunc( char* in[] )
{
int rows;
for(rows = 0; in[rows]; ++rows)
;
printf("%dn", rows);
.....
.....
}
int main()
{
char *in[] = {"abcd",, "efgh","ijkl", NULL};
char *out = myfunc( in );
}
只有当所有字符串长度相同时才值得检测列