1

我将多维字符数组传递给 c 中的函数。main() 或任何函数确定输入数组的大小(维度)。我试图在我的函数中动态确定数组的长度和宽度。到目前为止,我已经能够动态确定第一行的宽度。但是,如果我尝试使用相同的逻辑来确定长度,则会出现访问冲突错误。这是我到目前为止的代码:

char * myfunc( char* in[] )
{
    int index=0, cols=0;
    while( in[0][index++] != '\0' );
    cols = index - 1;
    :
    :
}

int main()
{
     char *in[3] = {"abcd","efgh","ijkl"};
     char *out   = myfunc( in );
     :
     :
}

对我来说幸运的是,**in 的所有“行”中的“cols”都是相等的。我知道一种更强大的方法是首先确定行数,然后测试每行的列数。每次尝试对行执行类似操作时,都会导致访问冲突错误。

我应该提一下,我无法重新定义函数来传递数组的维度。我还要提一下,这不是作业或工作作业,我在刷 c 编码技能时遇到了这个问题。有没有办法确定上述情况下的行数而不会导致访问冲突错误?

4

2 回答 2

2

有了你拥有的数据,它就无法完成。但是你可以像这样添加一个哨兵:

char *in[4] = {"abcd", "efgh", "ijkl", NULL};

然后查找哨兵(这实际上是您通过'\0'在第一个字符串中查找哨兵来计算列数)。

于 2013-04-22T16:15:28.627 回答
0
char * myfunc( char* in[] )
{
    int rows;
    for(rows = 0; in[rows]; ++rows)
        ;
    printf("%d\n", rows);

    .....
    .....
}

int main()
{
     char *in[] = {"abcd",, "efgh","ijkl", NULL};
     char *out   = myfunc( in );
}

仅当所有字符串的长度相同时才值得检测列。

于 2013-04-22T16:16:02.313 回答