長話短說,我正在制作這個3D OpenGL建造者游戲。細節并不重要,但我的問題是這樣的。我有這樣一個字串陣列:
char building_category_names_UPPER_CASE[][30] = { "NOTHING" , "倉庫", "加工廠", "工廠", "辦公室" };
我試圖將它們傳遞給一個函式,該函式接受一個字串陣列形式的 "串列",并通過Create_Button方法為該串列中的每個專案創建按鈕。
void Create_Button_List(char** list, int list_size, char* group_name, int pos_x, int pos_y)
{
for (int i = 1; i < list_size; i )
{
char name[50] 。
strcpy(name, list[i])。
char group[50] 。
strcpy(group, group_name)。
Create_Button(name, group, pos_x, i * pos_y, 205, 50, text_color_white, bg_color, text_color_white, bg_color_hover);
}
}
但是,即使 VS 在構建時沒有給我任何錯誤,當它到達 strcpy(name, list[i]); 部分時,我仍然得到一個訪問違規錯誤。
這里的問題是什么呢?難道我不應該這樣傳遞二維的char陣列嗎?還是我把它傳給 strcpy 的方式有問題?為了清楚起見,在這種情況下 list_size 是 5,所以這是對的,問題不應該是 for 回圈出界。
如果有人能幫我解決這個問題,請提前感謝!
uj5u.com熱心網友回復:
這個陣列
char building_category_names_UPPER_CASE[][30] = { "NOTHING" , "倉庫", "加工廠", "工廠", "辦公室" };
在運算式中使用,例如,一個函式引數被隱含地轉換為指向其第一個元素的指標。
該陣列的元素型別是char[30]。所以接受這個陣列作為引數的函式需要將相應的引數宣告為
char ( *list ) [30]
指標型別char ( * )[30]和char **之間沒有隱式轉換。
所以改變第一個函式引數的型別。
另一種方法是直接改變陣列的宣告,如
char * building_category_names_UPPER_CASE[] = { "NOTHING" , "WAREHOUSE", "PROCESSING PLANT", "FACTORY", "OFFICE" };
在這種情況下,函式引數可能確實具有char **型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/306943.html
標籤:
上一篇:JS:比較和驗證兩個陣列
