所以我的代碼是爲什麼64位ubuntu中的gcc沒有檢測到以下數組溢出?
#include <stdio.h>
#include <string.h>
int main()
{
const char *a="123456789abcdef";
char b[10];
int i=0;
while((b[i]=a[i])!='\0')
++i;
printf("%s, %d\n",b,strlen(b));
return 0;
}
的代碼存在與數組b中的一個陣列溢出,但是當我在我的系統(64位的Ubuntu 12.04 LTS)用gcc編譯(4.6.3版本),它成功。
該程序的輸出是123456789abcdef,15和
返回0表示該程序正常退出。
我不知道這是我的編譯器的問題還是我的系統,有人可以告訴我嗎? P.S.它似乎只出現在使用gcc的64位linux中。這是一個錯誤?
與Clang編譯返回'123456789ab @,13'。 – Blender
我冒昧地更正了你的代碼。 1:main必須是int。 2:一定是const。 3:printf有一個缺失)。順便說一句,我得到一個段錯誤。 –
謝謝,順便說一句c,函數默認設置爲int。它應該得到一個段錯誤,所以你使用什麼編譯器和系統! –