Lab-3: quiz 
 
Assert
查了一下作業提示中的:善用assert
使用說明
assert() 原型定義在 assert.h,接受一個表達式作為參數,當表達式為 false 時,會向 stderr 送出錯誤訊息,並調用 abort() 中止程式。
其缺點是頻繁調用會影響程序的性能,debug 完成後應在包含 assert.h 的 #include 敘述之前定義 NDEBUG,如下
#define NDEBUG
#include <assert.h>
或者使用 gcc 編譯時,加入 -DNDEBUG 參數,如此 assert() 便不會被編譯執行。
 
示意:
assert(<expression>);
此表達式應為程式中不會出現的情況(condition)
如果違反則會abort程式,並顯示程式中違反了此條expression(assertion),檔名,行號
 
 
 
  • 因為我的雙系統灌不起來(虛擬機器不能用perf),打算寫完code,再去借電腦跑效能分析
Question #2
題目:
Input: A sorted character array & a character
Output: the smallest charater that is strictly larger than the search character,
  •   if not found, return the smallest one.
  • (此狀況下就是return第一個element,因為sorted array中最小的就是第一個)
 
答:
iterative版本:
從array第一個掃到最後就是基本速度(worst case: array length)
 
遇到問題:在char smallest_character(char str[], char c)中,不知道該如何取得str[]的length
方法一
int length = sizeof(str) / sizeof(str[0]);
將length印出來與期望結果不符。。。
根據+許元杰同學:一般求一個陣列的 length 時,會使用 sizeof(arr[ ]) / sizeof(arr[0])  ,但若在function裡面用這種方法會得不到真正的 array  length ,據 cppreference.com 的解釋是 sizeof 是當應用在 reference type 時,結果只會 return size of the referenced type,所以只好多一個 array  length 參數給function。
 
方法二
int length = *(&str + 1) - str;
仍然無法取得正確的str length
 
 
方法三 
#include <string.h>
int length = strlen(str);
char smallest_character(char str[], char c){
        int i=0;
        for(i=0; i<strlen(str); i++){