#19280: 遇到 *** buffer overflow detected *** 錯誤


lomchi39@gmail.com (JazzTraveler Yang)


如題,我的程式碼在Dev C++上Pass後,送到了系統測試出現 緩衝區溢位 的問題。

 

下方為主程式:

int main(void){
   string str;
   char input[10];     <= Buffer Overflow error 發生在這行。
   int sum,i;

   while(cin>>str){

      strcpy(input, str.c_str());
      sum= LetterToNum(input[0]);  //額外寫一個"LetterToNum"的Function,把第一個英文字母的數字算出來

      for(i=1;i<9;i++)
         sum+= CharToInt(input[i])*(9-i);  //額外寫一個"CharToNum"的Function,把後面讀到的9碼字元轉成數字

      sum+=CharToInt(input[9]);

      if(sum%10==0)
         printf("real\n");
      else
         printf("fake\n");

   }  //end while(cin>>str)
}

遇到這個錯誤

#19281: Re:遇到 *** buffer overflow detected *** 錯誤


lomchi39@gmail.com (JazzTraveler Yang)


 

後來我是將 input[10]改成 input[11]後就解決這個Fail。

但我疑問的是,其實我只有讀取10位,在迴圈也沒用更多的陣列元素,為什麼會發生溢位的情況?

大大知道原因的話,懇請賜教,感恩<(_ _)>

#19285: Re:遇到 *** buffer overflow detected *** 錯誤


inversion (「我們所認識的可符香是個像天使的好女孩」之葉林 *Cries...)


strcpy(a, b) 這個函式,會將 b 的內容複製到 a 並補上一個字串結尾字元「\0」。(因為 C 的字串就是這麼作字串的結尾的)

而「\0」理所當然地也佔一個字元的大小。所以只宣告 10 個字元大小的陣列是不夠的,因為輸入 10 + 結尾 1 = 11 個字元,會超過陣列大小。

 

以上。

#19362: Re:遇到 *** buffer overflow detected *** 錯誤


lomchi39@gmail.com (JazzTraveler Yang)


strcpy(a, b) 這個函式,會將 b 的內容複製到 a 並補上一個字串結尾字元「\0」。(因為 C 的字串就是這麼作字串的結尾的)

而「\0」理所當然地也佔一個字元的大小。所以只宣告 10 個字元大小的陣列是不夠的,因為輸入 10 + 結尾 1 = 11 個字元,會超過陣列大小。

 

以上。



原來如此,是我對strcpy這個函式不夠熟,感謝解惑!