我正在將一個多維字符數組傳遞給c中的函數。 main()或其他函數確定輸入數組的大小(尺寸)。我想在我的函數中動態地確定數組的長度和寬度。到目前爲止,我已經能夠爲第一行動態確定寬度。但是,如果我嘗試使用相同的邏輯來確定長度,則會出現訪問衝突錯誤。這是我到目前爲止的代碼:c char **導致分配錯誤
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);
:
:
}
對我來說幸運的是,**中所有'行'中的'cols'是相等的。我知道更強大的方法是首先確定行數,然後測試每行後面的列數。每當我嘗試爲行執行類似操作時,我都會導致訪問衝突錯誤。
我應該提到,我無法重新定義傳遞數組維數的函數。我還應該提到,這不是作業或工作,我刷過C編碼技能時遇到了這個問題。有沒有一種方法可以確定上述情況下的行數而不會導致訪問衝突錯誤?
對於初學者來說,這應該是'const char * in [3]'。這些是字面常量。所以你的參數聲明也應該如此。 – WhozCraig 2013-04-22 16:16:15
我真的不控制調用這個函數的函數。這是一個挑戰。 – BigLib 2013-04-22 18:15:06
你不需要控制調用者。調用者可以傳遞非常量字符串(如果他們想要的話)。但除非你打算修改它們,或者將它們傳遞給一個函數,否則沒有理由*不*要在這裏將傳入的指針*聲明爲const。來電者會很好。反過來說(調用者用'const'指針調用,而你需要非const),你會遇到問題,但我在這裏看不到這種情況。 – WhozCraig 2013-04-22 18:57:52