2017-03-18 119 views
-9

的代碼是從C代碼寫在下面解釋這個和平的代碼的含義: -任何人都可以從C

int main(){ 
    char* time = (char *)malloc(10240 * sizeof(char)); 
    scanf("%s",time); 
    return 0; 
} 
+1

我們不是「解釋我在互聯網上找到的一些代碼,或者是由不願意解釋的朋友給出的網站」。 – Olaf

+1

這段代碼有很多問題 - 「sizeof(char)」是多餘的,不應該強制轉換malloc的結果,永遠不會釋放內存,不會檢查scanf中的返回代碼,代碼容易受到緩衝區溢出的影響,你缺少包含stdio.h和stdlib.h。代碼沒有任何意義 - 它讀取輸入然後退出。 –

回答

1

錯誤:

因爲在範圍內沒有原型malloc的編譯器將結果(類型void*)解釋爲類型int

然後它將該值轉換爲char*並將生成的(無意義的)值分配給time

然後,仍然使用無意義的值,它試圖存儲一個讀取值並將其解釋爲來自標準輸入的整數。

然後它退出而不做任何事情。特別是它不使用讀取或釋放內存(可能)更早分配的值。

0

它首先使用malloc函數從堆中動態保留內存,然後它正在掃描一個字符串。請注意格式fo%s的轉換說明符:與它有關的參數是一個指針(不是例如time [0])。

不要忘記在完成工作後內存應該是空閒的

syntax: free (time); 
0
char* time = (char *)malloc(10240 * sizeof(char)); 

在這裏,你使用malloc()分配的內存塊10240 * sizeof(char)你。 sizeof(char)等於4個字節,所以你分配的內存10240 * 4 = 40960塊作爲int默認情況下,你有沒有指定的範圍內(視爲void*)任何原型malloc()

然後你施放的內存空間爲char *和有*time指向分配給你的內存中的第一個塊。

scanf("%s",time); 

在這一行,你嘗試存儲在timescanf()解讀爲整數輸入一個值。你的格式說明符在這裏是錯誤的。

然後程序終止,但沒有釋放你分配給它的內存,也沒有對你用scanf()進行的任何操作做任何事情。