2017-09-06 43 views
0

這個問題可能看起來很簡單,但它是關於選擇。 我在相同的代碼庫中看到過這些,並且對這種方法有點困惑。哪個是有效的方法來初始化一個字符*到給定的C中沒有任何東西?

我們做一個空字符串初始化,所以我們沒有得到取消引用錯誤(我認爲)。

static char *name=(char *)""; 

和大多數情況下我已經看到了這

static char *name=NULL; 

,並在極少數情況下有太多看到了這一點。

static char *name=(char *) 0; 

我們可以將這些實踐中的任何一種稱爲標準,並且被普遍推薦嗎?如果是的話是什麼邏輯?

+0

請,*請*學習使用'const'。 – o11c

+0

有PIC的一個微小的性能差異,在第一需要搬遷,但真的不是你應該擔心什麼。 – o11c

回答

5

兩個版本跟投是非標準;在這兩種情況下演員都不是必要的(儘管在第二個演員中有更多理由)。

的初始化做兩種不同的工作 - 兩者都是很好的工作,但他們是不同的。

static char *name = ""; 

這裏,name是一個指向空字符串的有效指針。它可以傳遞給期望有效指針的函數,但空字符串是合理的。

static char *name = NULL; 
static char *name = 0; 

在這兩種情況下,name都是空指針 - 它並不指向任何有效的地方。後這兩種初始化的解引用name導致不確定的行爲,這通常意味着你的程序(但不一定)崩潰。在解引用它之前,您需要將變量點設置爲有效。

相關問題