2015-11-04 349 views
0

我正在寫一個程序,它將一個文件名列表存儲爲一個字符串數組。當我把它聲明爲char *文件名[1]或char *文件名有什麼區別?

char *filenames[1] 

我沒有錯誤...但是當我做

char *filenames 

我得到了一些錯誤。不在聲明中,但在以後使用。例如當我這樣做:

filenames[3]= (char*)malloc(strlen(line) + 1);//here ERROR is : Cannot assign char* to char. 

但與第一個聲明與[1]它都很好。我只是想知道他們之間有什麼區別?

相信我我試着在谷歌上尋找答案,但在這種情況下找不到任何好的答案。

+0

的指針兩者都是未定義的行爲。請按照C語言的初學者教程進行操作。在使用之前找出'filenames [3] = ...'的含義。 – juanchopanza

回答

1

首先,char *filenames表示命名filenameschar *變量,char *filenames[1]表示char *變量的數組,與一個元件。

從使用的角度來看,兩者是相同的,但主要區別在於,第一個必須用作普通變量,第二個可以作爲數組進行索引。

如果您只需要使用一個變量,請不要使用數組。如果你不夠小心,你可能有使用無界索引的危險。

另外,作爲說明,please see this discussion on why not to cast the return value of malloc() and family in C.

+0

謝謝,清除它。我沒有學習計算機科學,但我現在在IT方面工作。所以有時候我的基本知識可能會有些不穩定。 – ITguy

1

相對於這種說法

filenames[3]= (char*)malloc(strlen(line) + 1);//here ERROR is : Cannot assign char* to char. 

兩個聲明是錯誤的。

的firwt聲明

char *filenames[1] 

是錯誤的,因爲它聲明僅具有一個元素的指針數組char。但是在分配內存的語句中使用索引3。因此,嘗試訪問數組之外​​的內存,原因是有一個元素的數組的唯一有效索引是0

第二個聲明

char *filenames 

是錯誤的,因爲它不聲明指針數組。因此應用下標操作符用於識別符filenames

filenames[3] 

給出char類型的標量對象,而不是類型char *

相關問題