在問爲什麼不能從malloc/calloc返回數組大小(我已收到對此的答案)之前,我已經問過一個與此有關的問題。在其他源文件中定義循環數組的問題
我目前的問題是我有2個數組定義,並填寫兩個單獨的源文件ship.c和rescue_assets.c。我試圖在名爲system_handler.c的文件內的一個方法中遍歷它們。
我遇到的麻煩是,這項任務要求您不要將數組大小硬化到代碼中,所以我沒有看到如何將每個c文件的數組大小鏈接到第3個c文件中的此函數。
最後,我想:
assign_mayday_to_ships(int SIZE_OF_ARRAY_FROM_FILE_1, int SIZE_OF_ARRAY_FROM_FILE_2){
for(int i=0; i < SIZE_OF_ARRAYFROM_FILE_1; i++){
for(int j = 0; < SIZE_OF_ARRAYFROM_FILE_2; j++{
//do something
}
}
我可以很容易地做到這一點,如果他們是在同一個文件,但我不能把來自兩個不同文件的方法,因爲它顯然缺乏所需的參數。
這裏是有問題的代碼(IVE只添加了必需的片段,所有的標題被包括和系統運行如預期條得到數組的大小):
system_handler.c
void assign_mayday_to_ships() {
mayday_call* mday_ptr;
ship* ship_ptr;
rescue_asset* assets_ptr;
mday_ptr = read_mayday_file();
ship_ptr = read_ship_locations();
assets_ptr = read_recuse_assets();
int i;
int result;
/* loop through ship locations to find the ship that called the mayday
When found assign the mayday call to the ship for use when sending help*/
for (i = 0; i < arr_size; i++) {
result = strncmp(mday_ptr->ais, (ship_ptr + i)->ais, COMPARE_LIMIT);
if (result == 0) {
mday_ptr->ship = (ship_ptr + i);
}
}
calc_distance_to_mayday(mday_ptr, assets_ptr);
}
rescue_asset .c:assets是我想要獲得大小的數組。
rescue_asset* assets;
no_of_lines = count_lines(locof);
printf("number of lines = %d \n", no_of_lines);
assets = calloc(no_of_lines,sizeof (rescue_asset));
ship.c:船是數組想要得到的大小。
ship* ships;
/* -1 because first line of file is not a ship location*/
no_of_lines = (count_lines(locof) - 1);
ships = calloc(no_of_lines, sizeof (ship));
使用實際數組而不是calloc等是更好嗎?
謝謝, 克里斯。
多謝!我會選擇第一個選項,但是當我將size_t傳遞給read_rescue_assets(&asset_size)並在該方法內部時,我說:asset_size = no_of_lines它不更新assets_size的值,它保持爲某種愚蠢的大小!我更新了size_t行數的返回類型,但仍然沒有運氣:( –
@chrisedwards由於您將它作爲指針傳遞(您必須通過C中的引用傳遞),因此您必須使用解除引用運算符該函數,就像'* asset_size = no_of_lines;' –
@Joachin Pileborg謝謝,但是當我這樣做與上面的答案一起時,該值在方法內部正確設置,但後來當我在方法外打印它(所以如果我打印它在system_handler.c文件中)值不是他們應該的。任何想法? –