C語言大廠面試技巧及strcpy()函數(shù)示例詳解
1、什么是優(yōu)秀的代碼?
1. 代碼運(yùn)行正常
2. bug很少
3. 效率高
4. 可讀性高
5. 可維護(hù)性高
6. 注釋清晰
7. 文檔齊全
2、常見的coding技巧有哪些?
1. 使用assert
2. 盡量使用const
3. 養(yǎng)成良好的編碼風(fēng)格
4. 添加必要的注釋
5. 避免編碼的陷阱。
3、以模擬實(shí)現(xiàn)strcpy為例
(1)了解strcpy()函數(shù)

作用:將源字符串里的字符拷貝到目標(biāo)字符串中去。
注意:字符串的結(jié)束標(biāo)志'\0'也會拷貝過去。
證明如下:

(2)正片開始(危)
1.第一階段(面試官:最多5分)
#include<stdio.h>
void my_strcpy(char* dest, char* src)
{
while (*src!='\0')
{
*dest = *src;
dest++;
src++;
}
*dest = *src;//處理字符串的結(jié)束標(biāo)志'\0'
//*dest = '\0';這樣處理并非是不行,但是會給閱讀代碼的造成一種錯覺\
即這個'\0'是自己放進(jìn)去的,而不是從源字符串拷貝進(jìn)去的
}
int main()
{
char arr1[20] = { 0 };
char arr2[] = "hello";
my_strcpy(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
缺點(diǎn):如果傳的實(shí)參是空指針,就會出現(xiàn)問題,因?yàn)榭罩羔樖菬o法進(jìn)行解引用的。
解決方法:使用assert()進(jìn)行斷言,()里面放的是表達(dá)式。使用assert需要引用頭文件<assert.h>。
說明:assert(),括號中的表達(dá)式如果不滿足,編譯器就會報錯。
2.第二階段(面試官:最多7分)
#include<stdio.h>
#include<assert.h>
void my_strcpy(char* dest, char* src)
{
assert(dest != NULL);
assert(src != NULL);
//當(dāng)然,此處也可以將兩個合并成一個:assert( dest && src )
while (*src!='\0')
{
*dest = *src;
dest++;
src++;
}
*dest = *src;
}
int main()
{
char arr1[20] = { 0 };
char arr2[] = "hello";
my_strcpy(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
下面是圖片演示,加入傳入一個空指針就會出現(xiàn)下面的報錯。

3.第三階段的代碼:(面試官:最多8分)
#include<stdio.h>
#include<assert.h>
void my_strcpy(char* dest, char* src)
{
assert( dest && src );
while(*dest++ = *src++)//'\0'的ascii碼值為0,為假,會退出循環(huán)
{
;
}
}
int main()
{
char arr1[20] = { 0 };
char arr2[] = "hello";
my_strcpy(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
4.第四階段(面試官:完美代碼!10分?。?/h4>
通過對比發(fā)現(xiàn),與庫函數(shù)中的函數(shù)還相差一個const,以及返回類型不同。

#include<stdio.h>
#include<assert.h>
char * my_strcpy(char* dest, const char* src)
//const可以防止源字符串被改變
{
assert( dest && src );
char* ret = dest;
while(*dest++ = *src++)
{
;
}
return ret;
}
int main()
{
char arr1[20] = { 0 };
char arr2[] = "hello";
printf("%s\n", my_strcpy(arr1, arr2));
return 0;
}
以上就是C語言面試技巧及strcpy()函數(shù)示例詳解的詳細(xì)內(nèi)容,更多關(guān)于C語言面試技巧及strcpy()函數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C++常用函數(shù)之XML JSON格式轉(zhuǎn)換問題
XML在Json出現(xiàn)前應(yīng)用很廣泛,靈活性好,應(yīng)用語言也沒有限制,發(fā)展了這么長時間后xml標(biāo)準(zhǔn)已經(jīng)很臃腫。這篇文章主要介紹了C++常用函數(shù)之XML JSON格式轉(zhuǎn)換問題,需要的朋友可以參考下2020-02-02
C語言中send()函數(shù)和sendto()函數(shù)的使用方法
這篇文章主要介紹了C語言中send()函數(shù)和sendto()函數(shù)的使用方法,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-09-09

