面試題-找錯誤

參考來自  嵌入式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'爲結束符,因此這個函數是不會結束的,會一直循環下去。

注意字符數組的越界訪問。

相關文章
相關標籤/搜索