天天看點

面試點:字元串strcpy函數(C語言面試題分析之二)一.基本知識點二.程式錯誤分析

面試點:字元串strcpy函數

C語言面試題分析之二

Strcpy(字元數組1,字元串2)

1.strcpy該函數是通過第二個參數的字元串的結束符來判斷是否拷貝結束的;

2.strlen函數得到字元串的長度,是不包含字元串結束符的;

3.使用strcpy函數的時候,一定要注意第一個字元數組的大小至少不小于字元串2的大小,否則便是通路越界;

4.字元串2後面的`\0`也一同被複制到字元數組1中;

void test1()

  {

        

char string[10];

char* str1="0123456789";

strcpy(string, str1);

  }

  這裡string數組越界,因為str1字元的長度是10,還有一個結束符‘/0’。是以總共有11個字元長度。而string數組大小為10,是以就越界了。

  PS:使用strcpy函數的時候一定要注意前面目的數組的大小一定要大于後面字元串的大小,否則便是通路越界。

void test2()

char string[10], str1[10];

int i;

  for(i=0; i<10;i++)

  str1[i] ='a';

  strcpy(string, str1);

}

  這裡最大的問題還是str1沒有結束符,因為strcpy的第二個參數應該是一個字元串常量。該函數就是通過判斷第二個參數的結束符來判斷是否拷貝結束的。是以在for循環後面應加上str1p[9]

= '/0';

  PS:字元數組和字元串的最明顯的差別就是字元串會被預設的加上結束符‘/0’。

  void test3(char* str1)

if(strlen(str1)<=10)

{

               

  這裡的問題仍是越界問題。strlen函數得到字元串的長度,是除結束符之外的。如果str字元串的長度正好等于10的話,就很明顯越界了。

繼續閱讀