面試案例1:字符串拷貝函數問題。(不調用庫函數)
char *strcpy(char *strDest, const char *strSrc)
{
assert((strDest != NULL) && (strSrc != NULL));
char *address = strDest;
while((*strDest ++ = *strSrc ++) != '\0');
return address;
}
面試案例2:字符串鏈接問題。(不調用庫函數)
char* strcat(char* des, const char* src) // const表明爲輸入參數
{
assert((des!=NULL) && (src!=NULL));
char* address = des;
while(*des != '\0') // 移動到字符串末尾
++des;
while(*des++ = *src++)
;
return address;
}
面試案例3:字符串比較問題。(不調用庫函數)
int strcmp(const char *s1,const char *s2)
{
assert((s1!=NULL) && (s2!=NULL));
while(*s1 == *s2)
{
if(*s1 == '\0')
return 0;
++s1;
++s2;
}
return *s1 - *s2;
}
面試案例4:字符串長度問題。(不調用庫函數)
int strlen(const char* str)
{
assert(str != NULL);
int len = 0;
while((*str++) != '\0')
++len;
return len;
}
void assert( int expression );
宏 assert 經常用於在函數開始處檢驗傳入參數的合法性,可以將其看作是異常處理的一種高級形式。assert 的作用是先計算表達式expression,然後判斷:
如果表達式值爲假,那麼它先向stderr打印錯誤信息,然後通過調用 abort 來終止程序運行。
如果表達式值爲真,繼續運行後面的程序。
注意:assert只在 DEBUG 下生效,在調試結束後,可以通過在#include