免費開始練習
司法三等申論題 114年 [檢察事務官電子資訊組] 程式語言

第 一 題

針對以下 C 程式碼,請先說明執行該程式之輸出,以及程式中函式 left()、right() 之運作功能;並請說明在 testGen() 測試 left()、right() 過程中,有那幾行指令未被充分測試。(25 分) 01 #include 02 #include 03 #include 04 char* left(char* data, int len, const char symbol) { 05 int dLen = strlen(data); 06 char* result = (char*)malloc(dLen + 1); 07 if (len > dLen) len = dLen; 08 strcpy(result, data); 09 for (int i = len; i < dLen; i++) result[i] = symbol; 10 return result; 11 } 12 char* right(char* data, int len, const char symbol) { 13 int dLen = strlen(data); 14 char* result = (char*)malloc(dLen + 1); 15 if (len > dLen) len = dLen; 16 strcpy(result, data); 17 for (int i = (dLen-len); i < dLen; i++) result[i] = symbol; 18 return result; 19 } 20 void testGen() { 21 char str[] = "abcdef"; 22 char* left1 = left(str, 4, '@'); 23 char* left2 = left(str, 8, '@'); 24 char* right1 = right(str, 4, '@'); 25 printf("%s\n", left1); 26 printf("%s\n", left2); 27 printf("%s\n", right1); 28 free(left1); 29 free(left2); 30 free(right1); 31 } 32 int main() { 33 testGen(); 34 return 0; 35 }
📝 此題為申論題

思路引導 VIP

  1. 首先追蹤 leftright 的迴圈邏輯,注意字串索引與 symbol 替換的範圍,並逐步寫出 testGen 內三個函式呼叫的字串輸出。
  2. 接著對比測試參數 (4, 8, 4) 與函式內的條件式 (len > dLen),檢視是否有特定分支(True/False)從未被觸發,藉此找出缺乏分支涵蓋率(Branch Coverage)的程式碼行號。
🤖
AI 詳解 AI 專屬家教

【破題】 本題考查 C 語言字串操作、指標與動態記憶體配置的執行追蹤,同時藉由檢視測試案例評估程式碼的分支涵蓋率(Branch Coverage),以找出缺乏測試的特定指令。 【論述】

▼ 還有更多解析內容

升級 VIP 解鎖