參考來自 嵌入式c的經驗總結包含不少精華.pdf 中的 -----常見面試題深刻剖析 面試
void test2()數組
{
char string[10], str1[10];
int i;
for(i=0; i<10; i++)
{
str1[i] = 'a';
}
strcpy( string, str1 );
}函數
// 咱們能夠先把strcpy函數的原型寫出來 ,而後在詳細分析程序中的錯誤。 spa
char *strcpy(char * source ,const char * dest)原型
{string
char *p1=source;pdf
if(NULL==source||NULL==dest)test
{循環
return NULL;程序
}
while( *dest != '\0' )
{
*source=*dest;
source++; dest++;
}
return p1;
}
解答: 函數開始時,在棧上定義了兩個字符數組str,str1(末尾不會自動添加 '\0' ),接着賦值時沒有考慮到末尾 '\0',使其字符數組沒有以 '\0' 爲結束符,這樣進一步調用strcpy函數時,函數內部當時判斷複製是否結束時,就是以 '\0'爲結束符,因此這個函數是不會結束的,會一直循環下去。
注意字符數組的越界訪問。